作者:joshua317​

使用Java应用程序发送 E-mail,需要在机子上安装 JavaMail API 和Java Activation Framework (JAF) 。

  • 可以从 Java 网站下载最新版本的​​JavaMail​​,打开网页右侧有个 Downloads 链接,点击它下载。
  • 可以从 Java 网站下载最新版本的​​JAF(版本 1.1.1)​​。

也可以使用本站提供的下载链接,右键复制下载链接地址,进行下载:

一、导入jar文件

首先打开​​File | project Structure| Modules​​​,或者使用快捷键​​Ctrl+Alt+Shift+S​​快捷键直接唤出project Structure面板

 

JavaMail 网易邮件发送demo-发送带附件的邮件_html

 

 

然后添加这两个jar包

JavaMail 网易邮件发送demo-发送带附件的邮件_客户端_02

 

 

二、编写代码

package com.joshua317;

import javax.activation.DataHandler;
import javax.activation.FileDataSource;
import javax.mail.*;
import javax.mail.internet.*;
import java.io.UnsupportedEncodingException;
import java.util.Date;
import java.util.Properties;

public class SendEmail {
public static void main(String[] args) {
// 收件人电子邮箱,TODO 换成自己的收件箱
String to = "xxxx@qq.com";

// 发件人电子邮箱,TODO 换成自己的发件箱
String from = "xxx@163.com";

// 指定发送邮件的主机为
String host = "smtp.163.com";

// 获取系统属性
//Properties properties = System.getProperties();
Properties properties = new Properties();
// 设置邮件服务器
properties.setProperty("mail.smtp.host", host);
// 邮件发送协议
properties.setProperty("mail.transport.protocol", "smtp");
//是否启用调试模式(启用调试模式可打印客户端与服务器交互过程时一问一答的响应消息)
properties.setProperty("mail.debug","true");
properties.setProperty("mail.smtp.auth", "true");
// 获取默认session对象
Session session = Session.getDefaultInstance(properties,new Authenticator(){
@Override
public PasswordAuthentication getPasswordAuthentication()
{
//发件人邮件用户名、授权码,换成自己的发件箱及授权码
return new PasswordAuthentication("xxx@163.com", "xxxxx");
}
});

try{
// 创建默认的 MimeMessage 对象
MimeMessage message = new MimeMessage(session);

// Set From,设置发件人
InternetAddress fromMail = new InternetAddress(from);
//设置发件人名称,TODO 换成自己的发件箱
fromMail.setPersonal(MimeUtility.encodeText("joshua317<xxx@163.com>"));
message.setFrom(fromMail);

// Set To: 设置收件人
InternetAddress toMail = new InternetAddress(to);
// TODO 换成自己的收件箱
InternetAddress toMail2 = new InternetAddress("xxx@163.com");
//发一个邮箱
// message.setRecipient(Message.RecipientType.TO, toMail);

//发多个邮箱
Address[] allRecipients = {toMail, toMail2};
message.setRecipients(Message.RecipientType.TO, allRecipients);

// Set Subject: 邮件主体
message.setSubject("发送一封测试邮件!网易邮箱!");

// 设置消息体
message.setSentDate(new Date());

// 指定为混合关系
MimeMultipart msgMultipart = new MimeMultipart("mixed");
message.setContent(msgMultipart);

// 邮件信息组装
//组装的顺序非常重要,一定要先组装文本域,再组装文件
MimeBodyPart htmlPart = new MimeBodyPart();
// 组装内容
htmlPart.setContent("This is message content", "text/html;charset=UTF-8");
msgMultipart.addBodyPart(htmlPart);

// 组装附件
MimeBodyPart filePart = new MimeBodyPart();
//TODO 换成自己的附件地址
FileDataSource file_datasource = new FileDataSource("F:\\resource\\xxx.zip");
DataHandler dh = new DataHandler(file_datasource);
filePart.setDataHandler(dh);
// 附件区别内嵌内容的一个特点是有文件名,为防止中文乱码要编码
filePart.setFileName(MimeUtility.encodeText(dh.getName()));
msgMultipart.addBodyPart(filePart);

message.saveChanges();
//发送
//Transport.send(message, message.getAllRecipients());
Transport.send(message);
System.out.println("Sent mail successfully....");
}catch (MessagingException | UnsupportedEncodingException mex) {
mex.printStackTrace();
}
}
}

三、测试运行

 

JavaMail 网易邮件发送demo-发送带附件的邮件_Java_03

 

 

 

JavaMail 网易邮件发送demo-发送带附件的邮件_html_04

 

 

四、其他

4.1 关于163邮箱IMAP/SMTP的开启

1)使用电脑,打开浏览器

2)电脑登录 mail.163.com,点击设置>POP3/SMTP/IMAP

3)客户端授权密码,点击"开启"

JavaMail 网易邮件发送demo-发送带附件的邮件_Java_05

 

 

4)在弹出窗口中,完成手机短信验证

JavaMail 网易邮件发送demo-发送带附件的邮件_java_06

 

 

5)手机短信验证通过后,请设置客户端授权密码并确认

JavaMail 网易邮件发送demo-发送带附件的邮件_java_07

 

 

6)点击确定,确认自动开启SMTP/POP3/IMAP服务,完成客户端授权码设置

注意:

关于授权密码:

授权码是用于登录第三方邮件客户端的专用密码。

适用于登录以下服务: 您开启的服务(例如POP3/IMAP/SMTP)、Exchange/CardDAV/CalDAV服务。