如何用Java实现邮件发送?---- 网站通过邮箱激活底层代码

本文介绍如何使用Java发送邮件,包括简单示例代码及网站中通过邮件激活账户的应用。提供了发送邮件所需的重要Java包,并展示了如何配置邮件服务器进行邮件发送。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

本篇博客知识点:
1.简单的代码展示邮件发送
2.实际演示
3.网站中代码发邮箱的应用—通过邮箱激活账号

想要用Java发邮件必须要这两个包
这里写图片描述

package sendEmail;

import java.util.Date;
import java.util.Properties;

import javax.mail.Authenticator;
import javax.mail.MessagingException;
import javax.mail.PasswordAuthentication;
import javax.mail.Session;
import javax.mail.Transport;
import javax.mail.internet.AddressException;
import javax.mail.internet.InternetAddress;
import javax.mail.internet.MimeMessage;
import javax.mail.internet.MimeMessage.RecipientType;
/**
 * 邮件发送
 * @author<a href="mailto:hulonghua1996@qq.com">胡龙华</a>
 * @version 2017-8-12  上午9:51:41
 * @fileName sendEmail.java
 */
public class sendEmail {
    public static void main(String[] args) {
        String pwd = "********";
        String sendMail = "hulonghua1996@163.com";
        String reciMail = "*********";
        String subject = "代码发送邮件成功";
        String info = "代码发送邮件成功";
        send(sendMail, pwd, reciMail, info, subject);
    }
    /**
     * @param sendMail:发送邮箱
     * @param pwd     :密码
     * @param reciMail:接接收者邮箱
     * @param info   : 邮件信息
     * @param subject:邮件主题
     */
    public static void send(String sendMail,final String pwd,String reciMail,String info,String subject) {
        final String userName = sendMail.split("@")[0];
        Properties p = new Properties();
        // 如果是QQ 邮箱就把163改为qq(QQ邮箱可能因为需要授权码应该会没用)
        p.setProperty("mail.host", "smtp.163.com");
        p.setProperty("mail.smtp.auth", "true");
        //与邮箱服务器建立会话
        Session session = Session.getDefaultInstance(p,new Authenticator() {
            @Override
            protected PasswordAuthentication getPasswordAuthentication() {
                return new PasswordAuthentication(userName,pwd);
            }

        });
        session.setDebug(true);
        //准备邮件内容
        MimeMessage msg = new MimeMessage(session);
        try {
            //从哪儿发
            msg.setFrom( new InternetAddress(sendMail));
            //发到哪儿去
            msg.setRecipient(RecipientType.TO, new InternetAddress(reciMail));
            //设置主题
            msg.setSubject(subject);
            //设置内容和编码
            msg.setContent(info,"text/html;charset=utf-8");
            //设置发送日期
            msg.setSentDate( new Date() );
            //发送
            Transport.send(msg);
        } catch (AddressException e) {
            e.printStackTrace();
        } catch (MessagingException e) {
            e.printStackTrace();
        }

    }
}

我昨天测试发给QQ邮箱是可以的,今天试了一下就不行了。可能我的163邮箱 被QQ邮箱服务器定位垃圾广告了把
这里写图片描述

然后我自己给自己发 是没问题的 今天早上测试的
这里写图片描述

下面的代码是我练习的项目的代码的一部分,实现的功能是 用户在网站通过注册注册了账号,网站要验证邮箱是不是你本人在使用的,还是别人的,所以需要发送一个激活链接过去,主要是包括一个激活吧。 用户点击链接 再把激活码传给服务器,我们再去数据库验证。
(也需要前面的两个包)

package cn.hncu.pubs;

import java.util.Date;
import java.util.Properties;

import javax.mail.Authenticator;
import javax.mail.MessagingException;
import javax.mail.PasswordAuthentication;
import javax.mail.Session;
import javax.mail.Transport;
import javax.mail.internet.AddressException;
import javax.mail.internet.InternetAddress;
import javax.mail.internet.MimeMessage;
import javax.mail.internet.MimeMessage.RecipientType;

import cn.hncu.domain.User;
/**
 * @author<a href="mailto:953801304@qq.com">胡龙华</a>
 * @version 2017-8-12  上午10:05:39
 * @fileName SendMailThread.java
 */
public class SendMailThread extends Thread{
    private User user = null;
    public SendMailThread(User user) {
        this.user = user;
    }
    @Override
    public void run() {
        Properties p = new Properties();
        p.setProperty("mail.host", "smtp.163.com");
        p.setProperty("mail.smtp.auth", "true");


        Session session = Session.getDefaultInstance(p,new Authenticator() {

            @Override
            protected PasswordAuthentication getPasswordAuthentication() {
                // 下面两个参数  一个是邮箱账号 就@前面的部分  和你的密码
                return new PasswordAuthentication("hulonghua1996","*****");
            }

        });
        session.setDebug(true);

        MimeMessage msg = new MimeMessage(session);
        try {
            msg.setFrom( new InternetAddress("hulonghua1996@163.com"));
            msg.setRecipient(RecipientType.TO, new InternetAddress(user.getEmail()));
            msg.setSubject("账号激活邮件,城院集团有有限公司欢迎你!");
            String info = "激活:<a href='http://127.0.0.1:8080/MailWeb/ActiveServlet?acode="+user.getAcode()+"'>激活</a>";
            info = info + "<br/>如果激活未成功,请把地址复制到浏览器进行手动请求以进行激活:http://127.0.0.1:8080/MailWeb/ActiveServlet?acode="+user.getAcode();
            msg.setContent(info,"text/html;charset=utf-8");
            msg.setSentDate( new Date() );

            Transport.send(msg);
        } catch (AddressException e) {
            e.printStackTrace();
        } catch (MessagingException e) {
            e.printStackTrace();
        }

    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值