极客开源-如何使用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)团队成员,“马卡龙” 编写, 团队的使命是用开托性的思维写最稳定的代码,创造一流的互联网产品!