java----发送邮件2

1.添加jar包 html

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

2.发送代码java

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.测试代码  apache

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

4.如上去25端口发送邮件,在本地测试能够经过。当打到线上环境时,发现报错了。 服务器

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

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);
  }
}

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

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

相关文章
相关标签/搜索