java实现发送邮件包含添加附件等(一)
2014-09-22 13:38
691 查看
最近公司要求做招聘网站,其中有个功能就是邮件功能,我就自己写了个示例,实例需要导入mail.jar。本示例采用了面向对象的思维,首先将邮件功能分为三个类:
邮件信息类(MailInfo)、邮件服务器类(MailServer)、邮件发送工具类(MailSender)
邮件信息类主要是针对邮件本身来划分的。具体包括有 邮件主题、邮件内容、邮件附件、 收件人邮箱、抄送人邮箱、暗送人邮箱等。
注意实体中添加了addToAdress(Personperson)等接受类型为Person参数的方法,方便添加收件人等信息。
邮件服务器类主要是描述邮件发送者以及邮件服务器信息的实体。它包含的属性有 邮件服务器地址(smtp地址)、邮件服务器端口号(默认为25)、邮件发送者地址、邮件发送人名称、邮件发送者邮箱密码、邮件服务器是否需要对发送人身份进行验证等字段
邮件发送工具类此类是发送邮件的工具类,封装了一些发送邮件需要用到的方法,如设置收件人、设置抄送人等。
将测试数据中的附件地址及邮箱和密码改为自己的邮箱密码,即可发送邮件了。
邮件信息类(MailInfo)、邮件服务器类(MailServer)、邮件发送工具类(MailSender)
邮件信息类主要是针对邮件本身来划分的。具体包括有 邮件主题、邮件内容、邮件附件、 收件人邮箱、抄送人邮箱、暗送人邮箱等。
<span style="font-family:Courier New;"><span style="font-family:Courier New;"><span style="font-family:Courier New;">package com.wugu.zhaopin.mail; import java.io.Serializable; import java.util.ArrayList; import java.util.List; /** * * @ClassName: MailInfo * @Description: 邮件信息类 * @author yangch * */ public class MailInfo implements Serializable{ private static final long serialVersionUID = 7978358893754871565L; // 邮件接收者的地址 private List<Person> toAdress = new ArrayList<Person>(); // 抄送 private List<Person> bccAdress = new ArrayList<Person>(); // 暗送 private List<Person> ccAdress = new ArrayList<Person>(); // 邮件主题 private String subject = ""; // 邮件的文本内容 private String content = ""; // 邮件附件的文件名 private List<String> atch = new ArrayList<String>(); public List<Person> getToAdress() { return toAdress; } /** * 添加收信人 * @param toAdress */ public void addToAdress(Person toAdress) { this.toAdress.add(toAdress); } /** * 添加暗送人 * @param bccAdress */ public void addBccAdress(Person bccAdress) { this.bccAdress.add(bccAdress); } /** * 添加抄送人 * @param ccAdress */ public void addCcAdress(Person ccAdress) { this.ccAdress.add(ccAdress); } /** * 添加附件 */ public void addAtch(String path) { this.atch.add(path); } public List<Person> getBccAdress() { return bccAdress; } public List<Person> getCcAdress() { return ccAdress; } public String getSubject() { return subject; } public void setSubject(String subject) { this.subject = subject; } public String getContent() { return content; } public void setContent(String content) { this.content = content; } public List<String> getAtch() { return atch; } public String listToString(List<Person> list){ String str = ""; for (Person person : list) { str += "姓名=" + person.name; str += "邮箱地址=" + person.address; str += " "; } return str; } /** * 收信人信息 * @author Administrator */ public static class Person implements Serializable{ /** * */ private static final long serialVersionUID = 361815405618703809L; //姓名 private String name; //地址 private String address; public Person(){ super(); } public Person(String name, String address) { super(); this.name = name; this.address = address; } public String getName() { return name; } public void setName(String name) { this.name = name; } public String getAddress() { return address; } public void setAddress(String address) { this.address = address; } } } </span></span></span>
注意实体中添加了addToAdress(Personperson)等接受类型为Person参数的方法,方便添加收件人等信息。
邮件服务器类主要是描述邮件发送者以及邮件服务器信息的实体。它包含的属性有 邮件服务器地址(smtp地址)、邮件服务器端口号(默认为25)、邮件发送者地址、邮件发送人名称、邮件发送者邮箱密码、邮件服务器是否需要对发送人身份进行验证等字段
<span style="font-family:Courier New;"><span style="font-family:Courier New;"><span style="font-family:Courier New;">/** * @Title: MailServer.java * @Package com.wugu.mail * @author yangch * @date 2014-9-19 * @version V1.0 * Update Logs: * **************************************************** * Name: * Date: * Description: ****************************************************** */ package com.wugu.mail; import java.io.Serializable; import java.util.Properties; /** * @ClassName: MailServer * @author yangch * @date 2014-9-19 * */ public class MailServer implements Serializable { private static final long serialVersionUID = 1L; //邮件服务器地址 smtp地址 private String serverHost; //邮件服务器端口号 private String serverPort = "25"; //邮件服务器名称 private String serverName; //邮件服务器邮箱地址 private String serverAddress; //邮件服务器密码 private String password; //是否需要身份验证 private boolean isValidate; public String getServerHost() { return serverHost; } public void setServerHost(String serverHost) { this.serverHost = serverHost; } public String getServerPort() { return serverPort; } public void setServerPort(String serverPort) { this.serverPort = serverPort; } public String getServerName() { return serverName; } public void setServerName(String serverName) { this.serverName = serverName; } public String getServerAddress() { return serverAddress; } public void setServerAddress(String serverAddress) { this.serverAddress = serverAddress; } public String getPassword() { return password; } public void setPassword(String password) { this.password = password; } public boolean isValidate() { return isValidate; } public void setValidate(boolean isValidate) { this.isValidate = isValidate; } public Properties getProperties(){ Properties p = new Properties(); p.put("mail.smtp.host", this.serverHost); p.put("mail.smtp.port", this.serverPort); //这样才能通过验证,注意必须得是字符串”true“或”false“ p.put("mail.smtp.auth", this.isValidate?"true":"false"); return p; } /** * <p>Title: </p> * <p>Description: </p> * @author yangch * @param serverHost * @param serverPort * @param serverName * @param serverAddress * @param password * @param isValidate * @param template */ public MailServer(String serverHost, String serverPort, String serverName, String serverAddress, String password, boolean isValidate) { super(); this.serverHost = serverHost; this.serverPort = serverPort; this.serverName = serverName; this.serverAddress = serverAddress; this.password = password; this.isValidate = isValidate; } }</span></span></span>
邮件发送工具类此类是发送邮件的工具类,封装了一些发送邮件需要用到的方法,如设置收件人、设置抄送人等。
<span style="font-family:Courier New;"></pre><pre name="code" class="java"><span style="font-family:Courier New;">/** * @Title: MailSender.java * @Package com.wugu.mail * @Description: TODO(用一句话描述该文件做什么) * @author yangch * @date 2014-9-19 * @version V1.0 * Update Logs: * **************************************************** * Name: * Date: * Description: ****************************************************** */ package com.wugu.mail; import java.io.Serializable; import java.io.UnsupportedEncodingException; import java.util.Date; import java.util.List; import java.util.Properties; import java.util.logging.Logger; import javax.activation.DataHandler; import javax.activation.FileDataSource; import javax.mail.Address; import javax.mail.Authenticator; import javax.mail.Message; import javax.mail.MessagingException; import javax.mail.Multipart; import javax.mail.PasswordAuthentication; import javax.mail.Session; import javax.mail.Transport; 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; import com.wugu.mail.MailInfo.Person; /** * @ClassName: MailSender * @Description: TODO(这里用一句话描述这个类的作用) * @author yangch * @date 2014-9-19 * */ public class MailSender implements Serializable { private static final long serialVersionUID = 1L; private static final Logger log = Logger.getLogger(MailSender.class.getName()); private MailServer mailServer; public MailSender(MailServer mailServer){ this.mailServer = mailServer; } //身份验证器 class MailAuth extends Authenticator{ private String username; private String password; public MailAuth(String username, String password){ this.username = username; this.password = password; } public MailAuth(){ } @Override protected PasswordAuthentication getPasswordAuthentication() { return new PasswordAuthentication(username, password); } } //获取对应的收件人 public Address[] getAddressArr(List<Person> list) throws UnsupportedEncodingException, AddressException{ Address[] to = new Address[list.size()]; for(int i = 0; i < to.length; i++){ Person person = list.get(i); if(null == person.getName()){ to[i] = new InternetAddress(person.getAddress()); }else{ to[i] = new InternetAddress(person.getAddress(), MimeUtility.encodeText(person.getName(), MimeUtility.mimeCharset("utf-8"), null)); } } return to; } //设置收件人信息 public void setRecipients_To(Message message, MailInfo mailInfo) throws Exception{ List<MailInfo.Person> list = mailInfo.getToAdress(); if(null == list || list.isEmpty()){ throw new Exception("toAddress can not be null"); } Address[] to = getAddressArr(mailInfo.getToAdress()); message.setRecipients(Message.RecipientType.TO, to); } //设置抄送人地址 public void setRecipients_CC(Message message, MailInfo mailInfo) throws Exception{ List<Person> list = mailInfo.getCcAddress(); if(null != list && list.size() > 0){ Address[] cc = getAddressArr(list); message.setRecipients(Message.RecipientType.CC, cc); } } //设置暗送地址 public void setRecipients_BCC(Message message, MailInfo mailInfo) throws MessagingException, UnsupportedEncodingException{ List<Person> list = mailInfo.getBccAddress(); if(null != list && list.size() > 0){ Address[] bcc = getAddressArr(list); message.setRecipients(Message.RecipientType.BCC, bcc); } } //设置附件和内容 public void setHTMLPart(Message message, MailInfo mailInfo) throws MessagingException, UnsupportedEncodingException{ Multipart multi = new MimeMultipart(); List<String> list = mailInfo.getAttch(); //设置附件 for(String attch:list){ MimeBodyPart body = new MimeBodyPart(); FileDataSource fds = new FileDataSource(attch); body.setDataHandler(new DataHandler(fds)); body.setFileName(MimeUtility.encodeWord(fds.getName(), "GB2312", null)); multi.addBodyPart(body); } //设置内容 MimeBodyPart textBody = new MimeBodyPart(); textBody.setContent(mailInfo.getContent(), "text/html;charset=utf-8"); multi.addBodyPart(textBody); // 将MiniMultipart对象设置为邮件内容 message.setContent(multi); message.setSentDate(new Date()); } /** * * @Title: sendMail_in * @Description: 邮件工具类 * @author yangch * @date 2014-9-22 * @param info * @throws Exception * @throws */ public void sendMail_in(MailInfo info) throws Exception{ Properties prop = this.mailServer.getProperties(); Authenticator auth = new MailAuth(mailServer.getServerAddress(), mailServer.getPassword()); Session session = Session.getDefaultInstance(prop, auth); session.setDebug(true); Message message = new MimeMessage(session); log.info("--------开始发送邮件---------"); message.setSubject(MimeUtility.encodeText(info.getSubject(), MimeUtility.mimeCharset("utf-8"), null)); log.info("邮件主题为:"+info.getSubject()); log.info("发送人地址:"+mailServer.getServerAddress()); Address from = new InternetAddress(mailServer.getServerAddress(), MimeUtility.encodeText(mailServer.getServerAddress(), MimeUtility.mimeCharset("utf-8"), null)); message.setFrom(from); log.info("收件人地址"+info.listToString(info.getToAdress())); setRecipients_To(message, info); //设置抄送 setRecipients_CC(message, info); log.info("抄送人地址"+info.listToString(info.getCcAddress())); //设置暗送 setRecipients_BCC(message, info); log.info("暗送人地址"+info.listToString(info.getBccAddress())); //设置附件和内容 setHTMLPart(message, info); //发送邮件 Transport.send(message); log.info("-------------发送成功--------------"); } /** * * @Title: sendMail * @Description: 邮件发送前进行必填项的检查 * @author yangch * @date 2014-9-22 * @param info * @throws Exception * @throws */ public void sendMail(MailInfo info) throws Exception{ if(mailServer == null || mailServer.getServerHost() == null || mailServer.getServerAddress() == null || mailServer.getServerPort() == null || mailServer.getPassword() == null){ throw new Exception("邮件服务器为空或者配置不全"); } sendMail_in(info); } //测试方法 public static void main(String[] args) throws Exception { MailInfo mail = new MailInfo(); //设置附件 mail.addAttch("D:\\work\\ARCH4系统架构设计说明书.doc"); //设置内容 mail.setContent("<html><head><h1>我是测试邮件。。。。。</h1></head></html>"); mail.setSubject("Hello Mail !!!"); //设置收件人地址 mail.addToAddress(new Person("洋洋", "991622230@qq.com")); //设置 MailServer server = new MailServer("smtp.exmail.qq.com", "25", "吾谷人才", "你的邮箱@wugu.com.cn", "您的密码", true); MailSender sender = new MailSender(server); sender.sendMail(mail); } public MailServer getMailServer() { return mailServer; } public void setMailServer(MailServer mailServer) { this.mailServer = mailServer; } } </span></span>
将测试数据中的附件地址及邮箱和密码改为自己的邮箱密码,即可发送邮件了。
相关文章推荐
- JavaMail实现发送邮件,可添加附件(JAVA SWING)
- erlang实现smtp发送邮件(包含网页、正文、附件)
- java发送邮件并添加附件
- C#编程实现发送邮件的方法(可添加附件)
- C#实现邮件发送,可以添加附件,发件人、收件人信息从xml文件读取
- java实现 邮件抄送,密送,多个附件 发送
- Java实现发送邮件功能(可带附件)
- Java实现通过poi把数据查出来放在模板Excel中并作为附件发送邮件
- Java实现邮件发送【带附件】
- java实现邮件发送, 抄送及多附件发送
- android利用javamail实现后台发送可添加附件的邮件
- java实现邮件发送(带附件)
- java中javamail发送带附件的邮件实现方法
- 用java实现的邮件系统六(javamail发送复杂邮件-带附件和html)
- javaMail邮件发送模版(实现图片、附件的添加)
- 强大的java编程实现邮件发送功能,支持内容,上传多个图片和多个附件
- ABAP实现发送外部邮件(添加附件)功能
- Java邮件开发(二):使用JMail发送一封图文并茂且包含附件的邮件(下)
- java发送邮件带附件、格式、可以实现转发、秘密转发等操作
- Java实现邮件发送(附件)