案例环境:易邮邮件服务器+火狐邮件客户端-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(); } }}