注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

天朝布衣田中码农参上

苦逼码农的点点滴滴,请多多指教!

 
 
 

日志

 
 
 
 

利用JavaMail发送邮件  

2017-10-13 10:12:40|  分类: JAVA |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |
JavaMail,顾名思义,提供给开发者处理电子邮件相关的编程接口。它是Sun发布的用来处理email的API。可以方便地执行一些常用的邮件传输,甚至可以基于JavaMail开发出类似于Microsoft Outlook的应用程序。JavaMail创建的邮件是基于MIME协议的,因此可以使用JavaMail创建出即包含图片,又包含附件的复杂邮件【MIME协议规定了要使用分隔线对多段数据进行分隔,并使用Content-Type头字段对数据的类型、以及多个数据之间的关系进行描述】。目前最新版本是JavaMail1.5.0,开源且免费【如需察看源代码请前往:https://maven.java.net/content/groups/public/javax/mail/mail/】。下面就来简要讲讲使用方法:
1)下载【官方地址:http://java.net/projects/javamail/downloads/download/javax.mail.jar】,把这个jar添加到classpath。
2)发送只包含文本的邮件的例子:

public static Boolean sendSimpleMail(Properties prop)throws Exception {
if(prop==null || prop.getProperty("mail.host")==null || prop.getProperty("username")==null || prop.getProperty("password")==null || prop.getProperty("to")==null || prop.getProperty("body")==null){
//缺乏必要的参数
return false;
}
//设置协议为smtp
prop.setProperty("mail.transport.protocol", "smtp");
//设置用户验证为真
prop.setProperty("mail.smtp.auth", "true");
//创建session
Session session = Session.getInstance(prop);
//开启Session的debug模式,这样就可以查看到程序发送Email的运行状态
session.setDebug(true);
//通过session得到transport对象
Transport ts = session.getTransport();
//使用邮箱的用户名和密码连上邮件服务器
ts.connect(prop.getProperty("mail.host"),prop.getProperty("username"), prop.getProperty("password"));
//创建邮件对象
MimeMessage message = new MimeMessage(session);
message.setFrom(new InternetAddress(prop.getProperty("username")));
//指明邮件的收件人,现在发件人和收件人是一样的,那就是自己给自己发
message.setRecipient(Message.RecipientType.TO, new InternetAddress(prop.getProperty("to")));
//邮件的标题,可以允许为空
message.setSubject(prop.getProperty("subject")==null?"":prop.getProperty("subject"));
//邮件的文本内容
message.setContent(prop.getProperty("body"), "text/html;charset=UTF-8");
//发送邮件
ts.sendMessage(message, message.getAllRecipients());
//关闭连接
ts.close();
return true;
}

//调用方法
public static void main(String[] args) throws Exception{
Properties prop = new Properties();
//设置邮件服务器
prop.setProperty("mail.host", "smtp.163.com");
//设置用户名
prop.setProperty("username", "593668.com@163.com");
//设置密码
prop.setProperty("password", "123456");
//设置邮件标题
prop.setProperty("subject", "邮件标题");
//设置邮件内容
prop.setProperty("body", "邮件内容");
//设置邮件接收者
prop.setProperty("to", "admin@593668.com");
System.out.println(sendSimpleMail(prop));
}
3)发送带图片的邮件例子:

public static Boolean sendImageMail(Properties prop,String[] imgsrc)throws Exception {
if(prop==null || prop.getProperty("mail.host")==null || prop.getProperty("username")==null || prop.getProperty("password")==null || prop.getProperty("to")==null || prop.getProperty("body")==null){
return false;
}
//如果没有带图片,直接就调纯文本邮件方法
if(imgsrc==null || imgsrc.length==0)sendSimpleMail(prop);
prop.setProperty("mail.transport.protocol", "smtp");
prop.setProperty("mail.smtp.auth", "true");
Session session = Session.getInstance(prop);
session.setDebug(true);
Transport ts = session.getTransport();
ts.connect(prop.getProperty("mail.host"),prop.getProperty("username"), prop.getProperty("password"));
MimeMessage message = new MimeMessage(session);
message.setFrom(new InternetAddress(prop.getProperty("username")));
message.setRecipient(Message.RecipientType.TO, new InternetAddress(prop.getProperty("to")));
message.setSubject(prop.getProperty("subject")==null?"":prop.getProperty("subject"));
//邮件的文本内容
MimeBodyPart text = new MimeBodyPart();
// 描述数据关系
MimeMultipart mm = new MimeMultipart();
//图片信息字符串
String imginfo="";
for(int i=0;i<imgsrc.length;i++){
imginfo+="<img src='cid:"+imgsrc[i]+"'>";
}
text.setContent(prop.getProperty("body")+imginfo, "text/html;charset=UTF-8");
mm.addBodyPart(text);
for(int i=0;i<imgsrc.length;i++){
// 准备图片数据
MimeBodyPart image = new MimeBodyPart();
DataHandler dh = new DataHandler(new FileDataSource(imgsrc[i]));
image.setDataHandler(dh);
image.setContentID(imgsrc[i]);
mm.addBodyPart(image);
}
mm.setSubType("related");
message.setContent(mm);
message.saveChanges();
ts.sendMessage(message, message.getAllRecipients());
ts.close();
return true;
}

//调用方法

public static void main(String[] args) throws Exception{
//以上省略,请参看发送普通文本邮件设置

System.out.println(sendImageMail(prop,new String[]{"f:\\593669.com\\1.jpg","f:\\593669.com\\2.jpg"}));
}

4)发送带附件的邮件例子:

public static Boolean sendAttachMail(Properties prop,String[] attach)throws Exception {
if(prop==null || prop.getProperty("mail.host")==null || prop.getProperty("username")==null || prop.getProperty("password")==null || prop.getProperty("to")==null || prop.getProperty("body")==null){
return false;
}
if(attach==null || attach.length==0)sendSimpleMail(prop);
prop.setProperty("mail.transport.protocol", "smtp");
prop.setProperty("mail.smtp.auth", "true");
Session session = Session.getInstance(prop);
session.setDebug(true);
Transport ts = session.getTransport();
ts.connect(prop.getProperty("mail.host"),prop.getProperty("username"), prop.getProperty("password"));
MimeMessage message = new MimeMessage(session);
message.setFrom(new InternetAddress(prop.getProperty("username")));
message.setRecipient(Message.RecipientType.TO, new InternetAddress(prop.getProperty("to")));
message.setSubject(prop.getProperty("subject")==null?"":prop.getProperty("subject"));
MimeBodyPart text = new MimeBodyPart();
MimeMultipart mm = new MimeMultipart();
text.setContent(prop.getProperty("body"), "text/html;charset=UTF-8");
mm.addBodyPart(text);
for(int i=0;i<attach.length;i++){
MimeBodyPart file = new MimeBodyPart();
DataHandler dh = new DataHandler(new FileDataSource(attach[i]));
file.setDataHandler(dh);
file.setFileName(dh.getName());
mm.addBodyPart(file);
}
mm.setSubType("mixed");
message.setContent(mm);
message.saveChanges();
ts.sendMessage(message, message.getAllRecipients());
ts.close();
return true;
}

//调用方法

public static void main(String[] args) throws Exception{
//以上省略,请参看发送普通文本邮件设置
System.out.println(sendAttachMail(prop,new String[]{"f:\\593669.com\\1.jpg","f:\\593669.com\\2.jpg"}));
}

5)发送即有图片,又有附件的邮件例子:

public static Boolean sendMixedMail(Properties prop,String[] imgsrc,String[] attach)throws Exception {
if(prop==null || prop.getProperty("mail.host")==null || prop.getProperty("username")==null || prop.getProperty("password")==null || prop.getProperty("to")==null || prop.getProperty("body")==null){
return false;
}
if(attach==null || attach.length==0 || imgsrc==null || imgsrc.length==0)sendSimpleMail(prop);
prop.setProperty("mail.transport.protocol", "smtp");
prop.setProperty("mail.smtp.auth", "true");
Session session = Session.getInstance(prop);
session.setDebug(true);
Transport ts = session.getTransport();
ts.connect(prop.getProperty("mail.host"),prop.getProperty("username"), prop.getProperty("password"));
MimeMessage message = new MimeMessage(session);
message.setFrom(new InternetAddress(prop.getProperty("username")));
message.setRecipient(Message.RecipientType.TO, new InternetAddress(prop.getProperty("to")));
message.setSubject(prop.getProperty("subject")==null?"":prop.getProperty("subject"));
MimeBodyPart text = new MimeBodyPart();
MimeMultipart mm = new MimeMultipart();
MimeMultipart at = new MimeMultipart();
//图片信息字符串
String imginfo="";
for(int i=0;i<imgsrc.length;i++){
imginfo+="<img src='cid:"+imgsrc[i]+"'>";
}
text.setContent(prop.getProperty("body")+imginfo, "text/html;charset=UTF-8");
mm.addBodyPart(text);
for(int i=0;i<imgsrc.length;i++){
MimeBodyPart image = new MimeBodyPart();
DataHandler dh = new DataHandler(new FileDataSource(imgsrc[i]));
image.setDataHandler(dh);
image.setContentID(imgsrc[i]);
mm.addBodyPart(image);
}
mm.setSubType("related");
for(int i=0;i<attach.length;i++){
MimeBodyPart file = new MimeBodyPart();
DataHandler dh = new DataHandler(new FileDataSource(attach[i]));
file.setDataHandler(dh);
file.setFileName(dh.getName());
at.addBodyPart(file);
}
at.setSubType("mixed");
//再套一层MimeBody
MimeBodyPart content = new MimeBodyPart();
content.setContent(at);
mm.addBodyPart(content);
message.setContent(mm);
message.saveChanges();
//发送邮件
ts.sendMessage(message, message.getAllRecipients());
//关闭连接
ts.close();
return true;
}

//调用方法
public static void main(String[] args) throws Exception{
//以上省略,请参看发送普通文本邮件设置
System.out.println(sendMixedMail(prop,new String[]{"f:\\tmp\\1.jpg","f:\\tmp\\2.jpg"},new String[]{"f:\\tmp\\1.jpg","f:\\tmp\\2.jpg"}));
}

总结:利用JavaMail发送邮件还是很容易的,批量发送也只需要修改下代码即可。只是得提醒一句,并不是所有的邮件客户端都能正确展示以上相应发送的邮件的。
  评论这张
 
阅读(0)| 评论(0)
推荐 转载

历史上的今天

在LOFTER的更多文章

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2017