利用JavaMail在服务端发邮件

         Javamail是Java官方提供的集成api,用起来很方便。引用jar包,导入工具类,配置好自己邮件发送方的邮箱设置,就可以使用了。

      pom文件引入

<!-- https://mvnrepository.com/artifact/org.apache.commons/commons-email -->
<dependency>
    <groupId>org.apache.commons</groupId>
    <artifactId>commons-email</artifactId>
    <version>1.4</version>
</dependency>

  发送的工具类:

import org.apache.commons.mail.EmailException;
import org.apache.commons.mail.HtmlEmail;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

/**
 * Created by yanyl on 2018/1/23.
 */
public class MailUtil {
    private static Logger logger = LoggerFactory.getLogger("MailUtil");
    /**
     *
     * @param smtp 邮件服务器地址
     * @param sender  发送方邮箱
     * @param receiver 接收方邮箱
     * @param password 发送方密码,如果报错用客户端授权密码
     * @param subject  发送邮箱的主题
     * @param message  发送的邮件内容
     * @return
     */
    public  static boolean send(String smtp,String sender,String receiver,String password,String subject,String message) {
        // 发送email
        HtmlEmail email = new HtmlEmail();
        try {
            // 这里是SMTP发送服务器的名字:163的如下:"smtp.163.com",qq:smtp.qq.com
            email.setHostName(smtp);
            // 字符编码集的设置
            email.setCharset("UTF-8");
            // 发送人的邮箱
            email.setFrom(sender);
            // 收件人的邮箱
            email.addTo(receiver);
            // 如果需要认证信息的话,设置认证:用户名-密码。分别为发件人在邮件服务器上的注册名称和密码
            email.setAuthentication(sender, password);
            // 要发送的邮件主题
            email.setSubject(subject);
            // 要发送的信息,由于使用了HtmlEmail,可以在邮件内容中使用HTML标签
            email.setMsg(message);
            // 发送
            email.send();
            if (logger.isDebugEnabled()) {
                logger.debug(sender + " 发送邮件到 " + receiver);
            }
            return true;
        } catch (EmailException e) {
            e.printStackTrace();
            logger.info(sender + " 发送邮件到 " + receiver
                    + " 失败");
            return false;
        }
    }
        
}

            只要引用jar包,再使用这个工具类就可以了,代码很简单,可以自己试试。

 

            可能遇到的问题:535 Error: authentication failed

org.apache.commons.mail.EmailException: Sending the email to the following server failed : smtp.163.com:25
at org.apache.commons.mail.Email.sendMimeMessage(Email.java:1410)
at org.apache.commons.mail.Email.send(Email.java:1437)
at cn.usi.zhjt.pay.util.MailUtil.send(MailUtil.java:28)
at cn.usi.zhjt.pay.service.quartz.QuartzJob.doJob(QuartzJob.java:532)
at com.xxl.job.executor.service.jobhandler.QuartzJobHandler.execute(QuartzJobHandler.java:35)
at com.xxl.job.core.router.thread.JobThread.run(JobThread.java:83)
Caused by: javax.mail.AuthenticationFailedException: 535 Error: authentication failed
at com.sun.mail.smtp.SMTPTransport$Authenticator.authenticate(SMTPTransport.java:826)
at com.sun.mail.smtp.SMTPTransport.authenticate(SMTPTransport.java:761)
at com.sun.mail.smtp.SMTPTransport.protocolConnect(SMTPTransport.java:685)
at javax.mail.Service.connect(Service.java:317)
at javax.mail.Service.connect(Service.java:176)
at javax.mail.Service.connect(Service.java:125)
at javax.mail.Transport.send0(Transport.java:194)
at javax.mail.Transport.send(Transport.java:124)
at org.apache.commons.mail.Email.sendMimeMessage(Email.java:1400)
... 5 more

        我用的是163邮箱,免费,邮件发送失败,报这个错误,重新检查了邮箱的设置。首先要开通pop3/SMTP权限,然后生成客户端授权码。邮件发送失败,原因是我使用了邮箱密码发送,而在此时,是需要使用授权码的。

     如果使用QQ邮箱,也类似,邮箱设置--账户里面,开通POP3/SMTP权限,生成授权码。


          需要注意的是,如果你们的服务器有防火墙,需要对邮件服务器的ip、端口号开出权限。

          我写的比较简单,这个博客介绍挺详细的http://blog.csdn.net/xietansheng/article/details/51673073

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

坚持是一种态度

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

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

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

打赏作者

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

抵扣说明:

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

余额充值