邮件发送

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

邮件服务器

  • smpt协议,pop3协议

JavaMail概述:

  • avaMail是由Sun定义的一套收发电子邮件的API,不同的厂商可以提供自己的实现类。但它并没有包含在JDK中,而是作为JavaEE的一部分。 厂商所提供的JavaMail服务程序可以有选择地实现某些邮件协议,常见的邮件协议包括:
    SMTP:简单邮件传输协议,用于发送电子邮件的传输协议;
    POP3:用于接收电子邮件的标准协议;
    IMAP:互联网消息协议,是POP3的替代协议。
    这三种协议都有对应SSL加密传输的协议,分别是SMTPS,POP3S和IMAPS。
    除JavaMail服务提供程序之外,JavaMail还需要JAF(JavaBeans Activation Framework)来处理不是纯文本的邮件内容,这包括MIME(多用途互联网邮件扩展)、URL页面和文件附件等内容。下图描述了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如下:

  • activation.jar
  • mail.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());
   }
 }
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 213,254评论 6 492
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,875评论 3 387
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 158,682评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,896评论 1 285
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,015评论 6 385
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,152评论 1 291
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,208评论 3 412
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,962评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,388评论 1 304
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,700评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,867评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,551评论 4 335
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,186评论 3 317
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,901评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,142评论 1 267
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,689评论 2 362
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,757评论 2 351

推荐阅读更多精彩内容