极客开源-如何使用Java来发送一封带附件的电子邮件?
刚接触Java不久的小伙伴们是否有被如何使用Java来发送一封带附件的电子邮件而困扰?别担心,极客开源带您学习如何使用JavaMail来发送一封电子邮件。
首先,要成功的执行发送邮件的Java程序,需要所依赖的Jar包。
1. activation.jar
2. commons-email-1.2.jar
3. javax.mail.jar
下载地址:http://download.csdn.net/detail/dbhunter/398258
下载地址:http://download.csdn.net/detail/u011716173/6279381
下载完毕添加进项目后,我们就可以正式开始啦!
第一步:
我们需要定义9个参数:
收件人,发件人,SMTP主机,邮箱用户名,邮箱密码,附件文件名,邮件主题,邮件正文,附件文件集合
定义完成后封装起来,只需要set即可。就像这样 ↓
String to = "";// 收件人
String from = "";// 发件人
String host = "";// smtp主机
String username = "";//用户名
String password = "";//密码
String filename = "";// 附件文件名
String subject = "";// 邮件主题
String content = "";// 邮件正文
Vector file = new Vector();// 附件文件集合
public MailUtils() {
}
public MailUtils(String to, String from, String smtpServer,
String username, String password, String subject, String content) {
this.to = to;
this.from = from;
this.host = smtpServer;
this.username = username;
this.password = password;
this.subject = subject;
this.content = content;
}
public void setHost(String host) {
this.host = host;
}
public void setPassWord(String pwd) {
this.password = pwd;
}
public void setUserName(String usn) {
this.username = usn;
}
public void setTo(String to) {
this.to = to;
}
public void setFrom(String from) {
this.from = from;
}
public void setSubject(String subject) {
this.subject = subject;
}
public void setContent(String content) {
this.content = content;
}
第二步:
由于编码不同,如果不处理编码问题,会导致发送出去的邮件出现乱码的情况,所以我们需要这么做。 ↓
public String transferChinese(String strText) {
try {
strText = MimeUtility.encodeText(new String(strText.getBytes(),
"UTF-8"), "GB2312", "B");
} catch (Exception e) {
e.printStackTrace();
}
return strText;
}
第三步:
如果所需要发送的邮件带有多个附件,那我们就需要把文件添加进集合中,就像这样。 ↓
public void attachfile(String fname) {
file.addElement(fname);
}
第四步:
当以上三步都完成后,就要正式构建发送邮件的代码了,一切尽在注释中! ↓
public boolean sendMail() {
// 构造mail session
Properties props = new Properties();
props.put("mail.smtp.host", host);
props.put("mail.smtp.auth", "true");
Session session = Session.getDefaultInstance(props,
new Authenticator() {
public PasswordAuthentication getPasswordAuthentication() {
return new PasswordAuthentication(username, password);
}
});
//Session session = Session.getDefaultInstance(props);
// Session session = Session.getDefaultInstance(props, null);
try {
// 构造MimeMessage 并设定基本的值
MimeMessage msg = new MimeMessage(session);
//MimeMessage msg = new MimeMessage();
msg.setFrom(new InternetAddress(from));
//msg.addRecipients(Message.RecipientType.TO, address); //这个只能是给一个人发送email
msg.setRecipients(Message.RecipientType.BCC, InternetAddress.parse(to));
subject = transferChinese(subject);
msg.setSubject(subject);
// 构造Multipart
Multipart mp = new MimeMultipart();
// 向Multipart添加正文
MimeBodyPart mbpCOntent= new MimeBodyPart();
mbpContent.setContent(content, "text/html;charset=gb2312");
// 向MimeMessage添加(Multipart代表正文)
mp.addBodyPart(mbpContent);
// 向Multipart添加附件
Enumeration efile = file.elements();
while (efile.hasMoreElements()) {
MimeBodyPart mbpFile = new MimeBodyPart();
filename = efile.nextElement().toString();
FileDataSource fds = new FileDataSource(filename);
mbpFile.setDataHandler(new DataHandler(fds));
String filename = new String(fds.getName().getBytes("gb2312"), "gb2312");
mbpFile.setFileName(filename);
// 向MimeMessage添加(Multipart代表附件)
mp.addBodyPart(mbpFile);
}
file.removeAllElements();
// 向Multipart添加MimeMessage
msg.setContent(mp);
msg.setSentDate(new Date());
msg.saveChanges();
// 发送邮件
Transport transport = session.getTransport("smtp");
transport.connect(host, username, password);
transport.sendMessage(msg, msg.getAllRecipients());
transport.close();
} catch (Exception mex) {
mex.printStackTrace();
return false;
}
return true;
}
大功告成!让我们来测试一下吧。
怎么样?小伙伴们有学会嘛?
以上来自极客开源 (Gke OpenSource Code)团队成员,“马卡龙” 编写, 团队的使命是用开托性的思维写最稳定的代码,创造一流的互联网产品!