使用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();
}
创建好上述内容执行发送邮件测试函数:(发送正文包含文字图片,附件)

