邮件是信息化时代不可缺少的交流方式之一,那我们如何去实现用自己写的程序发送邮件呢?想必大家都对JavaMail有一定的了解吧,它是sun公司发布的处理email的API可以发送一些生活中常用的邮件。JavaMail包中用于处理电子邮件的核心类是:Session,Message,Address,Authenticator,Transport,Store,Folder等。
首先我们介绍如何去实现发一封带有邮件并切包含图片的邮件(基于JavaMail开发出类似于Microsoft Outlook的应用程序,我们要把我们自己写的邮件文件在Outlook中打开)。再介绍之前,我们先去了解一下如何在一封邮件中实现及带有附件又带有图片,并且如何去设置它们的关系:
此图来自-----redarmy_chen
下面是具体实现代码:
package cn.csdn.javamail;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.UnsupportedEncodingException;
import javax.activation.DataHandler;
import javax.activation.FileDataSource;
import javax.mail.Message;
import javax.mail.MessagingException;
import javax.mail.Session;
import javax.mail.internet.AddressException;
import javax.mail.internet.InternetAddress;
import javax.mail.internet.MimeBodyPart;
import javax.mail.internet.MimeMessage;
import javax.mail.internet.MimeMultipart;
import javax.mail.internet.MimeUtility;
public class MailImageAndAttch {
/**
* @param args
* @throws MessagingException
* @throws AddressException
* @throws IOException
* @throws FileNotFoundException
*/
public static void main(String[] args) throws AddressException, MessagingException, FileNotFoundException, IOException {
// TODO Auto-generated method stub
//创建邮件
MimeMessage message=new MimeMessage(Session.getInstance(System.getProperties()));
//设置邮件
message.setFrom(new InternetAddress("Longmanfei@qq.com"));
message.setRecipient(Message.RecipientType.TO, new InternetAddress("longmanfei@qq.com"));
message.setSubject("复杂邮箱发送");
//设置邮件属性
MimeBodyPart text=new MimeBodyPart();
text.setContent("发送邮件内容<br/><img src='cid:1.jpg'><br/>", "text/html;charset=utf-8");
//设置图片
MimeBodyPart image=new MimeBodyPart();
image.setDataHandler(new DataHandler(new FileDataSource("src\\1.jpg")));
image.setContentID("1.jpg");
//设置图片和正文的关系
MimeMultipart mm=new MimeMultipart();
mm.addBodyPart(text);
mm.addBodyPart(image);
mm.setSubType("related");
//设置附件
MimeBodyPart accth=new MimeBodyPart();
DataHandler dh= new DataHandler(new FileDataSource("src\\大笑.mp3"));
accth.setDataHandler(dh);
String name=dh.getName();
//设置读取附件名称是不出现乱码
accth.setFileName(MimeUtility.encodeText(name));
//设置关系图片和bodypart关系
MimeBodyPart part=new MimeBodyPart();
part.setContent(mm);
//设置关系
MimeMultipart mM= new MimeMultipart();
mM.addBodyPart(part);
mM.addBodyPart(accth);
mM.setSubType("mixed");
//把MIME消息设置到message中
message.setContent(mM);
message.saveChanges();
message.writeTo(new FileOutputStream("d:\\66.eml"));
}
}
下面是以另一种方式实现的简单发送邮件的方法:
package com.sfc.model;
import org.apache.commons.mail.*;
public class SendMail {
public String to;/* 收信人地址 */
public String toName;//收信人姓名
public String subject;/* 主题 */
public String body;
public boolean sMail(String faname,String to,String toName,String subject,String body){
boolean flag=false;
HtmlEmail email=new HtmlEmail();
try {
email.setHostName("smtp.163.com");//设置发信的smtp服务器
email.addTo(to, toName);//设置收件人帐号和收件人
email.setFrom("Longmanfei@163.com",faname);//设置发信的邮件帐号和发信人
email.setSubject(subject);//设置邮件主题
email.setAuthentication("Longmanfei@163.com","123123");//如果smtp服务器需要认证的话,在这里设置帐号、密码
email.setCharset("utf-8");
//System.out.println("发送成功1");
email.setHtmlMsg("<B>您可以将联系方式公布</B><br>"+"<font color='#800000'>"+body+"</font><br>"+"<B><font color='red'>本消息来自58FF同城,有事您说话</font></B>");//设置邮件正文和字符编码
email.send();
flag=true;
} catch (EmailException e) {
//flag=false;
System.out.println("发送失败");
e.printStackTrace();
} return flag;
}
}
这个相对上面那种要简单的多,至于如何发送带附件的邮件,我们可以登录官方网站去产看相应的实现方法。第二中实现方式当不是用java项目运行的时候,而是通过相应的web项目传值,去发送时有课能会报错,那是因为没有导入相应的包,当遇到错误时可以去百度查找并去官网下相应的jar包文件。