一个javaMail.jar实现邮件发送

写这篇文章是基于目前我在做的一个项目中的一个需求,邮件催交功能。

首先需要下载一个javaMail.jar ,或者是maven依赖,或者是gradle的依赖。我用的是gradle的依赖方式加载jar。

不过还是要下载一下jar包。

dependencies{

//邮件催交需要的jar
compile files('E:\\ideaWorkspace\\jxls_template\\javaMail\\javax.mail-1.6.0.jar')

}

以下是实现代码:


package test.service;

import com.sun.mail.util.MailSSLSocketFactory;
import lombok.extern.slf4j.Slf4j;
import sun.rmi.runtime.Log;

import javax.mail.MessagingException;
import javax.mail.Session;
import javax.mail.Transport;
import javax.mail.internet.InternetAddress;
import javax.mail.internet.MimeMessage;
import java.io.UnsupportedEncodingException;
import java.util.Date;
import java.util.Properties;

/**
 * Created by czb on 2018/4/12.
 */
@Slf4j
public class Main {
    //发件人的邮箱和密码
    //一、发件人的邮箱需要开始SMTP服务
    public static String myEmailAccount = "xxxxxxxxx@qq.com";
    public static String myEmailPassword = "xxxxxxxxxxxxx";//二、授权码,并不是qq密码

    //发件人邮箱的SMTP服务器地址,如果是网易邮箱,这地方就是:smtp.163.com
    public static String myEmailSMTPHost = "smtp.qq.com";
    //收件人邮箱
    public static String receiveMailAccount = "xxxxxxxxxx@qq.com";

    public static void main(String[] args) {
        System.out.println("发送邮件开始~");
        // 1. 创建参数配置, 用于连接邮件服务器的参数配置
        Properties props = new Properties();// 参数配置
        props.setProperty("mail.transport.protocol", "smtp");// 使用的协议(JavaMail规范要求)
        props.setProperty("mail.smtp.host", myEmailSMTPHost);// 发件人的邮箱的 SMTP 服务器地址
        props.setProperty("mail.smtp.auth", "true");// 需要请求认证
        try {
            //三、开启SSL加密,如果没有SSL加密,会报530错误
            MailSSLSocketFactory mailSSLSocketFactory = new MailSSLSocketFactory();
            sf.setTrustAllHosts(true);
            props.put("mail.smtp.ssl.enable","true");
            props.put("mail.smtp.ssl.socketFactory",mailSSLSocketFactory);
        }catch (java.security.GeneralSecurityException e){
            log.error(e.getMessage());
        }
        // 2. 根据配置创建会话对象, 用于和邮件服务器交互
        Session session = Session.getInstance(props);
        session.setDebug(true);
        // 3. 创建一封邮件
        MimeMessage message = createMimeMessage(session, myEmailAccount, receiveMailAccount);
        try {
            // 4. 根据 Session 获取邮件传输对象
            Transport transport = session.getTransport();
            // 5. 使用 邮箱账号 和 密码 连接邮件服务器, 这里认证的邮箱必须与 message 中的发件人邮箱一致, 否则报错
            transport.connect(myEmailAccount, myEmailPassword);
            // 6. 发送邮件, 发到所有的收件地址, message.getAllRecipients() 获取到的是在创建邮件对象时添加的所有收件人, 抄送人, 密送人
            transport.sendMessage(message, message.getAllRecipients());
            // 7. 关闭连接
            transport.close();
        }catch (javax.mail.NoSuchProviderException e){
            log.error(e.getMessage());
        }catch (javax.mail.MessagingException e){
            log.error(e.getMessage());
        }
        System.out.println("发送邮件结束~");
    }

    /**
     * @param session     和服务器交互的会话
     * @param sendMail    发件人邮箱
     * @param receiveMail 收件人邮箱
     * @return message
     */
    public static MimeMessage createMimeMessage(Session session, String sendMail, String receiveMail) {
        // 1. 创建一封邮件
        MimeMessage message = new MimeMessage(session);
        try {
            // 2. From: 发件人
            message.setFrom(new InternetAddress(sendMail, "大头", "UTF-8"));
            // 3. To: 收件人(可以增加多个收件人、抄送、密送)
            message.setRecipient(MimeMessage.RecipientType.TO, new InternetAddress(receiveMail, "收件人名字", "UTF-8"));
            //To:增加收件人,如果要发送多个
            //message.addRecipient(MimeMessage.RecipientType.TO,new InternetAddress("xxxxxx@qq.com","最爱的明明","UTF-8"));
            // 4. Subject: 邮件主题
            message.setSubject("邮件主题", "UTF-8");
            // 5. Content: 邮件正文(可以使用html标签)
            Object o = "后来,终于在眼泪中明白,有些人,一旦错过就不在。妈妈说,人生不能错过的两种东西,最后一班回家的车,和一段真诚的感情,幸运的是,我只错过后者";
            message.setContent(o, "text/html;charset=UTF-8");
            // 6. 设置发件时间
            message.setSentDate(new Date());
            // 7. 保存设置
            message.saveChanges();
        }catch (UnsupportedEncodingException e){
            log.error(e.getMessage());
        }catch (MessagingException e){
            log.error(e.getMessage());
        }
        return message;
    }
}

以上代码有三个地方我标记为红色的,是需要注意的地方。


第一个地方:





这样做完之后,第一步就没啥问题了。

第二个地方,生成授权码:



好了,第二个注意的地方就解决了。

第三个地方是因为我之前没有加上那一段代码,所以报了530错误。说是ssl的权限被拒绝了,所以连不上。加上这段代码就OK了。


到此测试代码就完成了,然后测试一下:


OK,邮件发出去了。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

我就是那个大头

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值