java----发送邮件2

1.添加jar包 

        <dependency>
            <groupId>org.apache.commons</groupId>
            <artifactId>commons-email</artifactId>
            <version>1.5</version>
        </dependency>

2.发送代码

public class EmailUtils {
    /**
     * https://www.cnblogs.com/jimboi/p/6406237.html
     * 纯文本内容邮件
     */
    public static void sendEmail(String emailSender,String emailSenderPassword,String subject,String emailReceiver,String content) throws EmailException {
        Email email = new SimpleEmail();
        email.setHostName("smtp.qq.com");
        //密码是腾讯生成的第三方验证码 ascxdfbgztavbdlab
        email.setAuthentication(emailSender,emailSenderPassword);
        email.setFrom(emailSender);
        email.addTo(emailReceiver);
        email.setSubject(subject);
        //恭喜您注册自媒体号审核通过了,点击如下链接登录: <a href="http://www.baidu.com">xx电视台自媒体登录平台</a>
        email.setContent(content,"text/html;charset=UTF-8");
        email.send();
    }

3.测试代码 

public static void main(String[] args) {
        try {
            EmailUtils.sendEmail("[email protected]","ascxdfbgztavblab","审核通过","[email protected]","恭喜您注册自媒体号审核通过了,点击如下链接登录: <a href=\"http://baidu,com">xx电视台自媒体登录平台</a>");
        } catch (EmailException e) {
            e.printStackTrace();
        }
    }

4.如上去25端口发送邮件,在本地测试可以通过。当打到线上环境时,发现报错了。 

后来经排查发现,我们用的线上环境是阿里云,阿里云将 25端口封闭了。继续查找资料,发现腾讯邮箱支持465端口,需要设置ssl。不多说,代码如下。 

public class EmailUtils {
    /**
     * https://www.cnblogs.com/jimboi/p/6406237.html
     * https://www.cnblogs.com/15ho/p/5891148.html
     * 纯文本内容邮件
     */
    public static void sendEmail(EmailVO emailVO) throws EmailException, MessagingException {

        //设置ssl连接
        Security.addProvider(new com.sun.net.ssl.internal.ssl.Provider());
        final String SSL_FACTORY = "javax.net.ssl.SSLSocketFactory";
        Properties props = System.getProperties();
        props.setProperty("mail.smtp.host", "smtp.qq.com");
        props.setProperty("mail.smtp.socketFactory.class", SSL_FACTORY);
        props.setProperty("mail.smtp.socketFactory.fallback", "false");
        props.setProperty("mail.smtp.port", "465");
        props.setProperty("mail.smtp.socketFactory.port", "465");
        props.setProperty("mail.smtp.auth", "true");
        //建立邮件会话
        Session session = Session.getInstance(props, new Authenticator() {
            //身份认证
            protected PasswordAuthentication getPasswordAuthentication() {
                return new PasswordAuthentication(emailVO.getEmailSender(),emailVO.getEmailSenderPassword());
            }
        });
        //建立邮件对象
        MimeMessage message = new MimeMessage(session);
        message.setFrom(new InternetAddress(emailVO.getEmailSender()));
        message.setRecipients(Message.RecipientType.TO, emailVO.getEmailReceiver());
        message.setSubject(emailVO.getSubject());
        message.setContent(emailVO.getContent(),"text/html;charset=UTF-8");
        //发送邮件
        Transport.send(message);
  }
}

注意:如上邮箱服务器是采用腾讯的。所以发件人必须是腾讯的邮箱。 

ps:今天遇到个问题,我用的腾讯的邮箱服务器,账号+授权码采用 网易的,发送邮件始终报535:认证失败。后来才知道邮箱服务器认证只能认证自己家的账号。

猜你喜欢

转载自my.oschina.net/u/2312022/blog/2245432