java后端发送邮件信息

package com.cn.service.util;

import com.alibaba.fastjson.JSON;
import com.smarthome.service.dto.sendEmail.EmailAuthenticator;
import com.smarthome.service.dto.sendEmail.EmailSendInfo;
import org.apache.log4j.Logger;
import javax.mail.*;
import javax.mail.internet.InternetAddress;
import javax.mail.internet.MimeMessage;
import java.util.Date;
import java.util.Properties;

/**
 * Created by abbott on 2018/9/19.
 */
public class EmailSender {

    private static final Logger LOGGER = Logger.getLogger(EmailSender.class);

    public static boolean sendTextMail(EmailSendInfo mailInfo){
        /**发送状态*/
        boolean sendStatus = false;
        /**判断是否需要身份认证**/
        EmailAuthenticator authenticator = null;
        Properties pro = mailInfo.getProperties();
        if (mailInfo.isValidate()) {
            /**如果需要身份认证,则创建一个密码验证器*/
            authenticator = new EmailAuthenticator(mailInfo.getUserName(), mailInfo.getPassword());
        }
        /**根据邮件会话属性和密码验证器构造一个发送邮件的session**/
        Session sendMailSession = Session.getInstance(pro, authenticator);
        /**【调试时使用】开启Session的debug模式**/
        sendMailSession.setDebug(true);
        try {
            /**根据session创建一个邮件消息**/
            MimeMessage mailMessage = new MimeMessage(sendMailSession);
            /**创建邮件发送者地址**/
            Address from = new InternetAddress(mailInfo.getFromAddress());
            /**设置邮件消息的发送者**/
            mailMessage.setFrom(from);
            /**创建邮件的接收者地址,并设置到邮件消息中**/
            Address to = new InternetAddress(mailInfo.getToAddress());
            mailMessage.setRecipient(Message.RecipientType.TO, to);
            /**设置邮件消息的主题**/
            mailMessage.setSubject(mailInfo.getSubject(), "UTF-8");
            /**设置邮件消息发送的时间**/
            mailMessage.setSentDate(new Date());
            /**设置邮件消息的主要内容**/
            String mailContent = mailInfo.getContent();
            mailMessage.setText(mailContent, "UTF-8");
            LOGGER.info("---------------------");
            Transport.send(mailMessage);
            LOGGER.info("+++++++++++++++++++++");
            sendStatus = true;
        } catch (MessagingException ex) {
            LOGGER.info("发送邮件出现异常");
            ex.printStackTrace();
            return sendStatus;
        }
        return sendStatus;
    }


    public static void main(String[] args) {
        String fromaddr = "QQ邮箱";//发送邮箱
        String toaddr = "邮箱";//要发送的邮箱
        String title = "【申请人信息】";
        String content = "【测试内容】Hello, this is sample for to check send email using JavaMailAPI ";
        String port = "587";
        String host = "smtp.qq.com";
        String userName = "QQ邮箱"; //发送邮箱
        String password = "指的是授权码"; //发送邮件的授权码

        EmailSendInfo mailInfo = new EmailSendInfo();
        mailInfo.setMailServerHost(host);
        mailInfo.setMailServerPort(port);
        mailInfo.setValidate(true);
        mailInfo.setUserName(userName);
        mailInfo.setPassword(password);
        mailInfo.setFromAddress(fromaddr);
        mailInfo.setToAddress(toaddr);
        mailInfo.setSubject(title);
        mailInfo.setContent(content);

        /**发送文体格式邮件**/
       new EmailSender().sendTextMail(mailInfo);
    }
}

QQ邮箱 POP3 和 SMTP 服务器地址设置如下:

邮箱 POP3服务器(端口995) SMTP服务器(端口465或587)
qq.com pop.qq.com smtp.qq.com

SMTP服务器需要身份验证。

发送qq邮箱 异常:

   535 Error: ��ʹ����Ȩ���¼�������뿴: http://service.mail.qq.com/cgi-bin/help?subtype=1&&id=28&&no=1001256
javax.mail.AuthenticationFailedException: 535 Error: ÇëʹÓÃÊÚȨÂëµÇ¼¡£ÏêÇéÇë¿´: http://service.mail.qq.com/cgi-bin/help?subtype=1&&id=28&&no=1001256
DEBUG SMTP: AUTH LOGIN failed

原因:是因为还没有去邮箱那里设置开启POP3/SMTP服务

解决方法:

邮箱—>设置—>账户,然后拉下来,找到POP3/IMAP/SMTP/Exchange/CardDAV/CalDAV服务

开启服务:POP3/SMTP服务

开启好了POP3/SMTP服务之后,会有一个授权码,这个授权码就是上面的 password

 

阿里云邮箱服务器:

服务器名称 地址 非SSL协议端口 SSL协议端口号
POP  pop3.mxhichina.com 110 995
IMAP  imap.mxhichina.com 143 993
SMTP  smtp.mxhichina.com 25 465

网易163邮箱服务:

服务器名称 地址 非SSL协议端口 SSL协议端口号
POP  pop3.163.com 110 995
IMAP  imap.163.com 143 993
SMTP  smtp163.com 25 465/994

你可能感兴趣的:(java)