邮件发送

2019-01-28  本文已影响0人  寻Sweet
 看着一个好友的简书,让我不得不自己也想写写自己对邮件发送的认识。在现在像springboot已经集成很多的插件,邮件发送只需要在application.xml的文件配置邮件的协议,邮件的端口,邮件的用户名,密码,还有ssl安全协议的设置。(不设置这个协议,则导致不能连接腾讯、或者是163邮箱服务器,以及其他的邮件服务器)
 今天介绍的是163邮件服务器给qq邮箱发送邮件的方式 。

邮件服务器

JavaMail概述:

mail.jar:此JAR文件包含JavaMail API和Sun提供的SMTP、IMAP和POP3服务提供程序;

activation.jar:此JAR文件包含JAF API和Sun的实现。

三、JavaMail的关键对象:

JavaMail对收发邮件进行了高级的抽象,形成了一些关键的的接口和类,它们构成了程序的基础,下面我们分别来了解一下这些最常见的对象。

Properties:属性对象

由于JavaMail需要和邮件服务器进行通信,这就要求程序提供许多诸如服务器地址、端口、用户名、密码等信息,JavaMail通过Properties对象封装这些属性西信息。如下面的代码封装了两个属性信息:

 Properties props = new Properties();

props.put("mail.smtp.host", "smtp.sina.com.cn");

props.put("mail.smtp.auth", "true");

针对不同的的邮件协议,JavaMail规定了服务提供者必须支持一系列属性,下表是针对SMTP协议的一些常见属性(属性值都以String类型进行设置,属性类型栏仅表示属性是如何被解析的):

[查看这个详细内容的址]https://blog.csdn.net/zapldy/article/details/3971579

JAVA MailUtils邮件详解

https://blog.csdn.net/linli1991/article/details/63262532

Java MailUtils邮件发送工具类 支持附件
JavaMail Demo,引用的jar如下:

smtp设置参考https://www.west.cn/faq/list.asp?Unid=852

package com.alexli.uitl;
import java.util.Date;
import java.util.Enumeration;
import java.util.Properties;
import java.util.Vector;
import javax.activation.DataHandler;
import javax.activation.FileDataSource;
import javax.mail.Authenticator;
import javax.mail.Message;
import javax.mail.Multipart;
import javax.mail.PasswordAuthentication;
import javax.mail.Session;
import javax.mail.Transport;
import javax.mail.internet.InternetAddress;
 import javax.mail.internet.MimeBodyPart;
 import javax.mail.internet.MimeMessage;
 import javax.mail.internet.MimeMultipart;
 import javax.mail.internet.MimeUtility;
/**
* <p> @Description: 邮件发送工具类 </p>
* @author alexli
* @Date   2017年6月22日 上午10:34:41 
*/
public class MailUtils {

String to = "";         // 收件人邮箱地址
String from = "";       // 发件人邮箱地址
String host = "";       // smtp主机
String username = "";   //用户名
String password = "";   //密码
String filename = "";    // 附件文件名
String subject = "";     // 邮件主题
String content = "";     // 邮件正文
Vector file = new Vector();// 附件文件集合

public MailUtils() {}

public MailUtils(String to, String from, String smtpServer,
        String username, String password, String subject, String content) {
    this.to = to;
    this.from = from;
    this.host = smtpServer;
    this.username = username;
    this.password = password;
    this.subject = subject;
    this.content = content;
}

public void setHost(String host) {
    this.host = host;
}

public void setPassWord(String pwd) {
    this.password = pwd;
}

public void setUserName(String usn) {
    this.username = usn;
}

public void setTo(String to) {
    this.to = to;
}

public void setFrom(String from) {
    this.from = from;
}

public void setSubject(String subject) {
    this.subject = subject;
}

public void setContent(String content) {
    this.content = content;
}

/**
 * @param strText
 * @return
 * @Description: 把主题转为中文 utf-8
 * @author alexli
 * @Date   2017年6月22日 上午10:37:07
 */
public String transferChinese(String strText) {
    try {
        strText = MimeUtility.encodeText(new String(strText.getBytes(),
                "utf-8"), "utf-8", "B");
    } catch (Exception e) {
        e.printStackTrace();
    }
    return strText;
}

public void attachfile(String fname) {
    file.addElement(fname);
}

/**
 * @return
 * @Description: 发送邮件,发送成功返回true 失败false
 * @author alexli
 * @Date   2017年6月22日 上午10:37:47
 */
public boolean sendMail() {

    // 构造mail session
    Properties props = new Properties();
    props.put("mail.smtp.host", host);
    props.put("mail.smtp.auth", "true");
    props.put("mail.smtp.port", "25");//465

    Session session = Session.getDefaultInstance(props,
            new Authenticator() {
        public PasswordAuthentication getPasswordAuthentication() {
            return new PasswordAuthentication(username, password);
        }
    });

    try {
        // 构造MimeMessage 并设定基本的值
        MimeMessage msg = new MimeMessage(session);
        msg.setFrom(new InternetAddress(from));

        msg.setRecipients(Message.RecipientType.BCC, InternetAddress.parse(to));
        subject = transferChinese(subject);
        msg.setSubject(subject);

        // 构造Multipart
        Multipart mp = new MimeMultipart();

        // 向Multipart添加正文
        MimeBodyPart mbpContent = new MimeBodyPart();
        mbpContent.setContent(content, "text/html;charset=utf-8");

        // 向MimeMessage添加(Multipart代表正文)
        mp.addBodyPart(mbpContent);

        // 向Multipart添加附件
        Enumeration efile = file.elements();
        while (efile.hasMoreElements()) {

            MimeBodyPart mbpFile = new MimeBodyPart();
            filename = efile.nextElement().toString();
            FileDataSource fds = new FileDataSource(filename);
            mbpFile.setDataHandler(new DataHandler(fds));
            String filename = new String(fds.getName().getBytes(), "ISO-8859-1");

            mbpFile.setFileName(filename);
            // 向MimeMessage添加(Multipart代表附件)
            mp.addBodyPart(mbpFile);

        }

        file.removeAllElements();
        // 向Multipart添加MimeMessage
        msg.setContent(mp);
        msg.setSentDate(new Date());
        msg.saveChanges();

        // 发送邮件
        Transport transport = session.getTransport("smtp");
        transport.connect(host, username, password);
        transport.sendMessage(msg, msg.getAllRecipients());
        transport.close();
    } catch (Exception mex) {
        mex.printStackTrace();
        return false;
    }
    return true;
}


/**
 * @param args
 * @Description: 邮件测试main方法
 * @author alexli
 * @Date   2017年6月22日 上午10:40:36
 */
public static void main(String[] args) {
    MailUtils sendmail = new MailUtils();
    sendmail.setHost("smtp.exmail.qq.com");
    sendmail.setUserName("");
    sendmail.setPassWord("");
    sendmail.setTo("");
    sendmail.setFrom("");
    sendmail.setSubject("张小米");
    sendmail.setContent("<a href=\"https://baidu.com\">Link text</a>");
    //添加附件
//      sendmail.attachfile("d:\\CoolFormat3.4.rar");
    System.out.println(sendmail.sendMail());
   }
 }
上一篇下一篇

猜你喜欢

热点阅读