您的位置:首页 > 编程语言 > Java开发

JavaMail发送邮件

2016-08-18 17:13 274 查看
使用javax.mail可以发送普通文本文件,HTML格式的文件,同样可以发送图文并茂(包含附件)的java邮件。

发送邮件需要在验证发送的邮箱和密码:验证的帐号(本人使用163邮件)需要打开POP3/SMTP/IMAP



设置邮箱授权登录密码(已设置好):



新建java项目添加javax.mail.jar文件,并添加如下类文件:

发送邮件格式需要基本信息类:EmailMessage

package com.util.mail;

import java.util.Date;

/**
* 发送邮件需要基本信息类
*/
public class EmailMessage {
//	邮件接收者
public  static String TO = "15026933568@163.com";

//	邮件发送人
public  static String FROM = "15026933568@163.com";

// 发送人姓名
public  static String FROM_NAME = "15026933568";

//	 抄送者
public  static String CC="1298243794@qq.com";

//	 暗送者
public  static String BCC="15026933568@163.com";

//	邮件类型
public 	static String Email_Content = "text/plain";

//	邮件主题
public  static String Email_Subject = "Test Email With JavaMail";

//	邮件头
public  static String Email_Header = "This Is Email Header";

//	邮件内容
public  static String Email_Body = "<a href=\"http://www.baidu.com\">This Is Email Body</a>";

//	使用邮箱	如果使用QQ修改为smtp.qq.com
public  static String Email_Host = "smtp.163.com";

//	邮件发送日期
public 	static Date sendDate = new Date();

//	是否验证
public 	static boolean validate = true;
}


  发送者邮件信息验证类:MailAuthenticator

package com.util.mail;

import javax.mail.Authenticator;
import javax.mail.PasswordAuthentication;

/**
* 用户名和密码的验证
* @author xiazhongwei
*
*/
public class MailAuthenticator extends Authenticator{
private  String username="15026933568";
private  String password="******";

public MailAuthenticator() {
super();
}

/**
* 设置验证的用户名和密码
*/
public MailAuthenticator(String userName , String password) {
super();
this.username = userName;
this.password = password;
}

protected PasswordAuthentication getPasswordAuthentication()
{
return new PasswordAuthentication(this.username,this.password);
}
}


  发送邮件类:

package com.util.mail;

import java.util.Properties;

import javax.activation.DataHandler;
import javax.activation.DataSource;
import javax.activation.FileDataSource;
import javax.mail.Address;
import javax.mail.Authenticator;
import javax.mail.Message;
import javax.mail.Multipart;
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;

public class SendEmail
{

/**
* 发送普通邮件
* @throws Exception
*/
public void doSendNormalMail()
{
//		 获取系统环境
Properties prop = new Properties();
Authenticator auth = null;
//		判断发送邮件是否需要验证
if (EmailMessage.validate)
{
//			 邮件服务器认证   用户名和密码
auth =	new MailAuthenticator();
}
//		添加必要的信息
prop.put("mail.smtp.host", EmailMessage.Email_Host);
prop.put("mail.smtp.auth", "true");

//		 设置对话和邮件服务器进行通讯
Session session = Session.getDefaultInstance(prop, auth);
//		在控制台显示Debug信息
session.setDebug(true);
//		设置邮件对象
Message message = new MimeMessage(session);
try
{
//			 设置邮件主题
message.setSubject(EmailMessage.Email_Subject);
//			 设置邮件标题
message.setHeader("Header", EmailMessage.Email_Header);
//			  设置发送时间
message.setSentDate(EmailMessage.sendDate);

//			 设置发信人地址  和 名字
Address address = new InternetAddress(EmailMessage.FROM, EmailMessage.FROM_NAME);
//			把发件人信息添加到信息中
message.setFrom(address);

//			设置发件人地址
Address toAddress = new InternetAddress(EmailMessage.TO);
//			 设置接收人地址
message.setRecipient(Message.RecipientType.TO, toAddress);

//		 	设置多个收件人地址
//		 	message.addRecipient(Message.RecipientType.TO,new InternetAddress("xxx@xxx.com"));

//			 设置邮件格式
message.setContent("Content", EmailMessage.Email_Content);
//			 设置邮件内容    必须在设置文件格式后面
message.setText(EmailMessage.Email_Body);

//			保存上面添加的信息
message.saveChanges();
//			 发送邮件
System.out.println("sendNormalEmail() 开始发送邮件……");
Transport.send(message);
System.out.println("发送成功!");
} catch (Exception e) {
System.out.println("出错");
e.printStackTrace();
}
}

/**
* 发送HTML格式的邮件
*/
public void doSendHtmlMail() {
//		 获取系统环境
Properties prop = new Properties();

Authenticator auth = null;
if (EmailMessage.validate)
{
//			 邮件服务器认证   用户名和密码
auth = new MailAuthenticator();
}
//		添加必要的信息
prop.put("mail.smtp.host", EmailMessage.Email_Host);
prop.put("mail.smtp.auth", "true");

//		 设置对话和邮件服务器进行通讯
Session session = Session.getDefaultInstance(prop, auth);

//		设置邮件对象
Message message = new MimeMessage(session);
try
{
//			 设置邮件主题
message.setSubject(EmailMessage.Email_Subject);
//			 设置邮件标题
message.setHeader("Header", EmailMessage.Email_Header);
//			  设置发送时间
message.setSentDate(EmailMessage.sendDate);

//			 设置发信人地址  和 名字
Address address = new InternetAddress(EmailMessage.FROM, EmailMessage.FROM_NAME);
//			把发件人信息添加到信息中
message.setFrom(address);

//			设置发件人地址
Address toAddress = new InternetAddress(EmailMessage.TO);
//			 设置接收人地址
message.setRecipient(Message.RecipientType.TO, toAddress);

//		 	设置多个收件人地址
//		 	message.addRecipient(Message.RecipientType.TO,new InternetAddress("xxx@xxx.com"));

//			设置发送信息的内容   下面为发送hmml
//			设置邮件格式
EmailMessage.Email_Content = "text/html; charset=utf-8";
message.setContent(EmailMessage.Email_Body, EmailMessage.Email_Content);

//			保存上面添加的信息
message.saveChanges();
//			 发送邮件
System.out.println("doSendHtmlMail() 开始发送邮件……");
Transport.send(message);
System.out.println("发送成功!");
} catch (Exception e) {
System.out.println("出错");
e.printStackTrace();
}
}
/**
* 发送带有附件格式的邮件
*/
public void doSendAttachmentMail()
{
//		 获取系统环境
Properties prop = new Properties();

Authenticator auth = null;
if (EmailMessage.validate)
{
//			 邮件服务器认证   用户名和密码
auth = new MailAuthenticator();
}
//		添加必要的信息
prop.put("mail.smtp.host", EmailMessage.Email_Host);
prop.put("mail.smtp.auth", "true");

//		 设置对话和邮件服务器进行通讯
Session session = Session.getDefaultInstance(prop, auth);

//		设置邮件对象
Message message = new MimeMessage(session);
try
{
//			 设置邮件主题
message.setSubject(EmailMessage.Email_Subject);
//			 设置邮件标题
message.setHeader("Header", EmailMessage.Email_Header);
//			  设置发送时间
message.setSentDate(EmailMessage.sendDate);

//			 设置发信人地址  和 名字
Address address = new InternetAddress(EmailMessage.FROM, EmailMessage.FROM_NAME);
//			把发件人信息添加到信息中
message.setFrom(address);

//			设置发件人地址
Address toAddress = new InternetAddress(EmailMessage.TO);
//			 设置接收人地址
message.setRecipient(Message.RecipientType.TO, toAddress);

//		 	设置多个收件人地址
//		 	message.addRecipient(Message.RecipientType.TO,new InternetAddress("xxx@xxx.com"));

//			设置发送信息的内容   下面为发送附件
message.setContent(EmailMessage.Email_Body, EmailMessage.Email_Content);

//BodyPart messageBodyPart = new MimeBodyPart();
MimeBodyPart messageBodyPart = new MimeBodyPart();
String body = "<h4>内含附件、图文并茂的邮件测试!!!</h4> </br>"
+ "<a href = http://haolloyin.blog.51cto.com/> 蚂蚁</a></br>"
+ "<img src = \"cid:logo_jpg\"></a>";

MimeBodyPart image = createContent(body,"E:\\1.jpg");
messageBodyPart.setText("<img src='cid:image_fairy_tail'/>");

Multipart multipart = new MimeMultipart();
//multipart.addBodyPart(messageBodyPart);

messageBodyPart = new MimeBodyPart();

//			设置上传的资源
DataSource source = new FileDataSource("E:\\3.txt");
//			添加到
messageBodyPart.setDataHandler(new DataHandler(source));
//			设置文件名称,记得后缀名
messageBodyPart.setFileName("3.txt");
multipart.addBodyPart(messageBodyPart);

// 5. 创建图片“节点”
/*MimeBodyPart image = new MimeBodyPart();
DataHandler dh = new DataHandler(new FileDataSource("E:\\1.jpg")); // 读取本地文件
image.setDataHandler(dh);                   // 将图片数据添加到“节点”
image.setContentID("image_fairy_tail"); */    // 为“节点”设置一个唯一编号(在文本“节点”将引用该ID)
// 6. 创建文本“节点”
MimeBodyPart text = new MimeBodyPart();
//    这里添加图片的方式是将整个图片包含到邮件内容中, 实际上也可以以 http 链接的形式添加网络图片
text.setContent("这是一张图片<br/><img src='cid:image_fairy_tail'/>", "text/html;charset=UTF-8");
multipart.addBodyPart(image);
multipart.addBodyPart(text);

message.setContent(multipart);

//			保存上面添加的信息
message.saveChanges();
//			 发送邮件
System.out.println("doSendAttachmentMail() 开始发送邮件……");
Transport.send(message);
System.out.println("发送成功!");
} catch (Exception e)
{
System.out.println("出错");
e.printStackTrace();
}
}

/**
* 根据传入的邮件正文body和文件路径创建图文并茂的正文部分
*/
public MimeBodyPart createContent(String body, String fileName)
throws Exception {
// 用于保存最终正文部分
MimeBodyPart contentBody = new MimeBodyPart();
// 用于组合文本和图片,"related"型的MimeMultipart对象
MimeMultipart contentMulti = new MimeMultipart("related");

// 正文的文本部分
MimeBodyPart textBody = new MimeBodyPart();
textBody.setContent(body, "text/html;charset=utf-8");
contentMulti.addBodyPart(textBody);

// 正文的图片部分
MimeBodyPart jpgBody = new MimeBodyPart();
FileDataSource fds = new FileDataSource(fileName);
jpgBody.setDataHandler(new DataHandler(fds));
jpgBody.setContentID("logo_jpg");
contentMulti.addBodyPart(jpgBody);

// 将上面"related"型的 MimeMultipart 对象作为邮件的正文
contentBody.setContent(contentMulti);
return contentBody;
}

}


  发送邮件入口测试函数类:

/**
* @param args
*/
public static void main(String[] args)
{
//new SendEmail().doSendNormalMail();
//new SendEmail().doSendHtmlMail();
new SendEmail().doSendAttachmentMail();
}


创建好上述内容执行发送邮件测试函数:(发送正文包含文字图片,附件)





源码下载地址:https://github.com/ablejava/JavaMail
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: