案例环境:易邮邮件服务器+火狐邮件客户端-foxmail
首先设置好 易邮邮件服务器参数 根据自己的需求进行修改(点击设置)
web项目中 javaee自带mail包 可能会产生bug或者冲突。
解决办法:删除原有的包 导入自己的jar包
MIME协议在java中
mime(mixed)=mime(related+附件)
mime(related)=mime(alternative)+文本
-----------------------------------------------------------------------------------------------
代码如下
package cn.gdpe.mail;
import java.io.File;
import java.util.Date;
import java.util.Properties;
import javax.activation.DataHandler;
import javax.activation.DataSource;
import javax.activation.FileDataSource;
import javax.mail.MessagingException;
import javax.mail.Session;
import javax.mail.Transport;
import javax.mail.Message.RecipientType;
import javax.mail.internet.InternetAddress;
import javax.mail.internet.MimeBodyPart;
import javax.mail.internet.MimeMessage;
import javax.mail.internet.MimeMultipart;
import org.junit.Test;
public class MailFirst {
private static Properties prop=null;
static {
//1.邮件参数
prop=new Properties();
prop.put("mail.transport.protocol", "smtp");//设置协议
prop.put("mail.smtp.host", "127.0.0.1"); //设置主机
prop.put("mail.smtp.port", 25); //设置端口
prop.put("mail.smtp.auth", "true"); //是否验证
prop.put("mail.debug", "true"); //调试模式
}
//普通文本
public void testSendText(){
try {
//2.创建一个邮件的会话
Session session=Session.getDefaultInstance(prop);
//3.创建邮件体对象(整封邮件对象)
MimeMessage mm=new MimeMessage(session);
//3.1设置标题
mm.setSubject("这是我的第一封邮件");
//3.2设置时间
mm.setSentDate(new Date());
//3.3设置发件人
mm.setSender(new InternetAddress("lisi@hdxy.com"));
//3.4设置收件人
mm.setRecipient(RecipientType.TO, new InternetAddress("zhangs@hdxy.com"));
//3.5设置内容
// mm.setText("你好");//简单文本内容 只能发普通文本
// mm.setText("<a href='#'>111</a>");
mm.setContent("<a href='#'>111</a>","text/html;charset=utf-8");//发带超链接的内容
mm.saveChanges();
//4.发送
Transport trans=session.getTransport();
trans.connect("lisi", "123");
trans.sendMessage(mm, mm.getAllRecipients());
trans.close();
} catch (MessagingException e) {
e.printStackTrace();
}
}
//发图片
@Test
public void testSendImg(){
try {
//2.创建一个邮件的会话
Session session=Session.getDefaultInstance(prop);
//3.创建邮件体对象(整封邮件对象)
MimeMessage mm=new MimeMessage(session);
//3.1设置标题
mm.setSubject("这是我的第一封邮件");
//3.2设置时间
mm.setSentDate(new Date());
//3.3设置发件人
mm.setSender(new InternetAddress("lisi@hdxy.com"));
//3.4设置收件人
mm.setRecipient(RecipientType.TO, new InternetAddress("zhangs@hdxy.com"));
//3.5设置内容 内容为图片
//3.5.1 构建一个多功能邮件
MimeMultipart related=new MimeMultipart("related");
//3.5.2 构建一个多功能邮件内容=左侧文本+右侧资源
MimeBodyPart content=new MimeBodyPart();
MimeBodyPart resource=new MimeBodyPart();
//3.5.2 设置具体内容
String path=MailFirst.class.getResource("1.jpg").getPath();
DataSource dSource=new FileDataSource(new File(path));
DataHandler handler=new DataHandler(dSource);
resource.setDataHandler(handler);
resource.setContentID("1.jpg");//设置ID 提供外面使用
content.setContent("<img src='cid:1.jpg' />点击","text/html;charset=utf-8");
related.addBodyPart(content);
related.addBodyPart(resource);
//3.5.3把构建的related放到MimeMessage中
mm.setContent(related);
mm.saveChanges();
//4.发送
Transport trans=session.getTransport();
trans.connect("lisi", "123");
trans.sendMessage(mm, mm.getAllRecipients());
trans.close();
} catch (MessagingException e) {
e.printStackTrace();
}
}
//设置带附件的还带图片的邮件
public void testSendAttachment(){
try {
//2.创建一个邮件的会话
Session session=Session.getDefaultInstance(prop);
//3.创建邮件体对象(整封邮件对象)
MimeMessage mm=new MimeMessage(session);
//3.1设置标题
mm.setSubject("这是我的第一封邮件");
//3.2设置时间
mm.setSentDate(new Date());
//3.3设置发件人
mm.setSender(new InternetAddress("lisi@hdxy.com"));
//3.4设置收件人
mm.setRecipient(RecipientType.TO, new InternetAddress("zhangs@hdxy.com"));
//3.5设置内容 内容为图片
//3.5.1 构建一个总邮件
MimeMultipart mixed=new MimeMultipart("mixed");
MimeBodyPart left=new MimeBodyPart();
MimeBodyPart right=new MimeBodyPart();
mixed.addBodyPart(left);
mixed.addBodyPart(right);
//3.5.1.0 设置附件内容
String wordPath=MailFirst.class.getResource("readme.docx").getPath();
DataSource wordSource=new FileDataSource(new File(wordPath));
DataHandler wordhandler=new DataHandler(wordSource);
right.setDataHandler(wordhandler);
right.setFileName("readme");//设置附件名
//3.5.1.1 构建一个多功能邮件
MimeMultipart related=new MimeMultipart("related");
left.setContent(related);
//3.5.1.2 构建一个多功能邮件内容=左侧文本+右侧资源
MimeBodyPart content=new MimeBodyPart();
MimeBodyPart resource=new MimeBodyPart();
//3.5.1.3 设置具体内容
String photoPath=MailFirst.class.getResource("1.jpg").getPath();
DataSource photoSource=new FileDataSource(new File(photoPath));
DataHandler photohandler=new DataHandler(photoSource);
resource.setDataHandler(photohandler);
resource.setContentID("1.jpg");//设置ID 提供外面使用
content.setContent("<img src='cid:1.jpg' />点击","text/html;charset=utf-8");
related.addBodyPart(content);
related.addBodyPart(resource);
//3.5.3把构建的related放到MimeMessage中
mm.setContent(mixed);
mm.saveChanges();
//4.发送
Transport trans=session.getTransport();
trans.connect("lisi", "123");
trans.sendMessage(mm, mm.getAllRecipients());
trans.close();
} catch (MessagingException e) {
e.printStackTrace();
}
}
}