javamail发送邮件,发复杂html,包括附件,以及内嵌图片的邮件

更新时间:2023-07-08 13:37:16 阅读: 评论:0

javamail发送邮件,发复杂html,包括附件,以及内嵌图⽚的
邮件
当前版本:javamail1_4_4.zip      可以去oracle去下载最新的版本
发复杂的邮件,html内容,包括带附件的,邮件内容嵌⼊图⽚的邮件
⾸先,要导⼊的包有:
dsn.jar
mailapi.jar
smtp.jar
然后,直接看类——————————————————————————————————————————————————————————SendMail.java
package javamail;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import java.util.Map.Entry;
import java.util.Properties;
import java.util.Set;
import javax.activation.DataHandler;
import javax.activation.FileDataSource;
import javax.mail.Authenticator;
import javax.mail.Message;
import javax.mail.PasswordAuthentication;
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;
/**
*
* @author javalzbin
*
*/
小七孔风景区景点介绍
public class SendMail {
private  String smtp="";  //邮件服务器主机名
private  String protocol="";  //邮件传输协议
private  String urname="";  //登录⽤户名
private  String password="";  //登录密码
private  String from="";  //发件⼈地址
private  String to="";  //收件⼈地址
private  String subject="";  //邮件主题
private  String body="";  //邮件内容
//⼀个有规则的map,⽤作嵌⼊图⽚
Map<String,String> map;
/
/存放附件
List<String> list;
public SendMail(Map<String,String> map,List<String> filelist,Map<String,String> image){
黑童话故事this.("smtp");
this.("protocol");
this.("urname");
this.("password");
this.("from");
<=("to");
this.("subject");祛斑效果好的产品
this.("body");
this.list=filelist;
this.map=image;
}
public void nd()throws Exception{
Properties pros=new Properties();
pros.tProperty("ansport.protocol", this.protocol);
pros.tProperty("mail.host", this.smtp);
pros.put("mail.smtp.auth", "true");
MySendMailAuthenticator ma=new MySendMailAuthenticator(this.urname,this.password);
Session Instance(pros,ma);
ssion.tDebug(fal);
MimeMessage msg=createMessage(ssion);
Transport Transport();
ts.ndMessage(msg, Recipients(Message.RecipientType.TO));
ts.clo();
}
public MimeMessage createMessage(Session ssion)throws Exception{
MimeMessage message=new MimeMessage(ssion);
message.tFrom(new InternetAddress(this.from));
message.tRecipients(Message.RecipientType.TO, InternetAddress.par(to));
message.tSubject(this.subject);
MimeMultipart allMultipart=new MimeMultipart();
//创建代表邮件正⽂和附件的各个MimeBodyPart对象
MimeBodyPart contentpart=createContent(this.body);
allMultipart.addBodyPart(contentpart);
//创建⽤于组合邮件正⽂和附件的MimeMultipart对象
for(int i=0;i<list.size();i++){
allMultipart.addBodyPart((i)));
}
//设置整个邮件内容为最终组合出的MimeMultipart对象
message.tContent(allMultipart);
message.saveChanges();
return message;
}
@SuppressWarnings({ "rawtypes", "unchecked" })
public MimeBodyPart createContent(String body)throws Exception{
//创建代表组合Mime消息的MimeMultipart对象,将该MimeMultipart对象保存到MimeBodyPart对象  MimeBodyPart contentPart=new MimeBodyPart();
MimeMultipart contentMultipart=new MimeMultipart("related");
//创建⽤于保存HTML正⽂的MimeBodyPart对象,并将它保存到MimeMultipart中
MimeBodyPart htmlbodypart=new MimeBodyPart();
htmlbodypart.tContent(this.body,"text/html;chart=UTF-8");
contentMultipart.addBodyPart(htmlbodypart);
if(map!=null && map.size()>0) {
Set<Entry<String, String>> Set();
for (Iterator iterator = t.iterator(); iterator.hasNext();) {
Entry<String, String> entry = (Entry<String, String>) ();
//创建⽤于保存图⽚的MimeBodyPart对象,并将它保存到MimeMultipart中
MimeBodyPart gifBodyPart=new MimeBodyPart();
FileDataSource fds=new Value());//图⽚所在的⽬录的绝对路径
gifBodyPart.tDataHandler(new DataHandler(fds));
gifBodyPart.Key()); //cid的值
contentMultipart.addBodyPart(gifBodyPart);
}
}
/
/将MimeMultipart对象保存到MimeBodyPart对象
contentPart.tContent(contentMultipart);
return contentPart;
}
public MimeBodyPart createAttachment(String filename)throws Exception {
//创建保存附件的MimeBodyPart对象,并加⼊附件内容和相应的信息
MimeBodyPart attachPart=new MimeBodyPart();
FileDataSource fsd=new FileDataSource(filename);
attachPart.tDataHandler(new DataHandler(fsd));
attachPart.Name());
return attachPart;
}
}
//向邮件服务器提交认证信息
class MySendMailAuthenticator extends Authenticator{
String urname="";
郑伊健版String password="";
public MySendMailAuthenticator(String ur,String pass){
this.urname=ur;
this.password=pass;
}
protected PasswordAuthentication getPasswordAuthentication() {
return new PasswordAuthentication(urname,password);
}
}
接下来,如何调⽤:
Test.java
package javamail;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
public class Test {
public static void main(String[] args)throws Exception {
String content="<a href=>点击进⼊百度</a><br/>" +
"<img src=\"cid:a00000001\"><br/><br/>" +
"<img src=\"cid:a00000002\">";
Map<String,String> map=new HashMap<String,String>();
//邮件服务器主机名(smtp服务器地址)
//如:qq的smtp服务器地址:
map.put("smtp", "");
奥斯卡最佳动画//邮件传输协议:如smtp
map.put("protocol", "smtp");
//登录邮箱的⽤户名
map.put("urname", "492509610");
//登录邮箱的密码
map.put("password", "bugaosuni");
//发送⼈的帐号
map.put("from", "");
//接收⼈的帐号,多个以","号隔开
map.put("to", ",");
//邮件主题
map.put("subject", "这个是主题");
//邮件内容
map.put("body", content);
/
/内嵌了多少张图⽚,如果没有,则new⼀个不带值的Map
Map<String,String> image=new HashMap<String,String>();
image.put("a00000001", "D:/asdf.jpg");
image.put("a00000002", "D:/中⽂.jpg");
//附件的绝对路径,不发附件则new⼀个不带值的List
List<String> list=new ArrayList<String>();
list.add("D:/ccc.sql");
list.add("D:/l");
//创建实例
SendMail sm=new SendMail(map,list,image);
//执⾏发送
sm.nd();
}
}
SendMail.java我就不解释了,重点我也写了注释,需要的直接拿来⽤就可以了,关键是调⽤,我解释下test.java
conten是html内容,那么,如果需要在html内容中内嵌图⽚,最好不要采⽤在邮件正⽂中引⽤外部资源的⽅式,⽽是需要把图⽚⽂件内容当作邮件的内嵌资源处理,即把资源⽂件的内容和引⽤它的html邮件正⽂放在同⼀封邮件数据中,并将它们组合成MIME组合消息。
超链接标签<img src=\"cid:a00000001\">中的“cid:a00000001”,表⽰引⽤MIME消息中Content-ID属性值为a00000001的消息体数据。
这个测试要嵌⼊两个图⽚,那么,有两个<img>标签元素,对应者,image对象中,设置了两个图⽚的路径,其中,key则对应着img标签的cid属性值
如,上⾯的html中
<img src=\"cid:a00000001\">
<img src=\"cid:a00000002\">
那么,在image对象中,必然要对应着两条数据
杀毒打不开怎么办
image.put("a00000001", "D:/asdf.jpg");
image.put("a00000002", "D:/中⽂.jpg");
祝福卡片图片其中key,则对应着cid的值,value则是图⽚的绝对路径,如果有多个图⽚,那么image对象就有多条数据
然后的话 ,list 则是附件集合,⼀条数据就是⼀个⽂件的绝对路径,不带附件,那么是⽆数据的list,注意,⽆数据不是null,基于SendMail.java的判断,如果不带附件也没有嵌⼊图⽚,那么也需要这两个对象的实例,只是这两个实例都没有数据,即,SendMail
sm=new SendMail(map,new ArrayList<String>(),new HashMap<String,String>());
来看下效果:发到qq邮箱跟163邮箱,你会发现有些⼩不同
⾸先来看下QQ邮箱收到的效果:
显⽰正常,两个附件,两个内嵌的图⽚
再来看看163的效果
太长了,截不完,不过看的出不同的在哪了,163的附件,显⽰4个,其实它把内嵌的两个图⽚当作附件处理了,当然,内容显⽰的也是正常的,这个不妨碍,其实重点是在时间,我在代码中,没有设置发送时间,所以可以看到,163跟QQ解释的时间也不⼀样,QQ是以
UFC+0时区显⽰的,163显⽰的是中国时区,⾄于哪个⽐较好,这个见仁见智了,我个⼈觉得QQ做的⽐较好,那么,要想以中国的时区作为发送时间,那必须设置发送时间,看下⾯代码
SimpleDateFormat fm = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss", Locale.CHINA);
fm.TimeZone("GMT+8"));
String moditime=fm.format(new Date());
message.tSentDate(new Date(Timestamp.valueOf(moditime).getTime()));
tSentDate 是设置发送时间的意思,以上代码加到createMessage⽅法⾥的MimeMessage message=new MimeMessage(ssion);代码之后message.saveChanges();之前就可以了,这样,在QQ邮箱⾥的结果就跟163⼀样了,没什么其他⼤问题,有问题留⾔,

本文发布于:2023-07-08 13:37:16,感谢您对本站的认可!

本文链接:https://www.wtabcd.cn/fanwen/fan/89/1073020.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

标签:邮件   邮箱   附件   时间   对象   内容   发送
相关文章
留言与评论(共有 0 条评论)
   
验证码:
推荐文章
排行榜
Copyright ©2019-2022 Comsenz Inc.Powered by © 专利检索| 网站地图