javaMail发送邮件(支持单发、群发)

来源:互联网 发布:做微课用什么软件 编辑:程序博客网 时间:2024/05/22 00:35

1.所需夹包:javaMail.jar 、activation.jar

2.实现步骤:

(1).定义一个邮件消息类;

(2).定义一个服务器邮箱登录验证信息类;

(3).定义一个邮件发送类(核心类)

3.具体代码:

<pre name="code" class="java">package cn.my.utils;import java.util.List;/** * 邮件发送的信息实体类@date 2014.10.13 *  @author wangbowen *  @version 1.0 *  */public class SimpleMail {/** * 发送邮件者的地址 */public String fromAddress;/** * 登录邮件服务器的用户名 */public String userName;/** * 登录邮件服务器的密码 */public String userPassword;/** * 接受邮件者的地址 */public String toAddress;/** * 多个接受邮件者地址 */public List<String>  recipients;/** * 接受邮件的主题 */public String subject;/** * 邮件的内容 */public String content;/** * @return the fromAddress */public String getFromAddress() {return fromAddress;}/** * @param fromAddress *            the fromAddress to set */public void setFromAddress(String fromAddress) {this.fromAddress = fromAddress;}/** * @return the userName */public String getUserName() {return userName;}/** * @param userName *            the userName to set */public void setUserName(String userName) {this.userName = userName;}/** * @return the userPassword */public String getUserPassword() {return userPassword;}/** * @param userPassword *            the userPassword to set */public void setUserPassword(String userPassword) {this.userPassword = userPassword;}/** * @return the toAddress */public String getToAddress() {return toAddress;}/** * @param toAddress *            the toAddress to set */public void setToAddress(String toAddress) {this.toAddress = toAddress;}/** * @return the subject */public String getSubject() {return subject;}/** * @param subject *            the subject to set */public void setSubject(String subject) {this.subject = subject;}/** * @return the content */public String getContent() {return content;}/** * @param content *            the content to set */public void setContent(String content) {this.content = content;} /** * @return the recipients */public List<String> getRecipients() {return recipients;}/** * @param recipients the recipients to set */public void setRecipients(List<String> recipients) {this.recipients = recipients;}publicSimpleMail(List<String> recipients, String subject, String content) {this.recipients = recipients;this.subject = subject;this.content = content;}}

package cn.my.utils;import javax.mail.Authenticator;import javax.mail.PasswordAuthentication;/** * 服务器邮箱登录验证 * @author wangbowen@date2014.10.13 * @version 1.0 * */public class MailAuthenticator  extends Authenticator {    /**     * 用户名(登录邮箱)     */ private String userName = null;/** * 密码 */ private String userPass = null;/** * 无参 */public MailAuthenticator() {}/** * 初始化邮箱和密码 * @param userName 用户名 * @param userPass 密码 */public MailAuthenticator(String userName, String userPass) {this.userName = userName;this.userPass = userPass;}/** * 取值 * @return "" */@Overrideprotected PasswordAuthentication getPasswordAuthentication() {return new PasswordAuthentication(userName, userPass);}/** * @return the userName */public String getUserName() {return userName;}/** * @param userName the userName to set */public void setUserName(String userName) {this.userName = userName;}/** * @return the userPass */public String getUserPass() {return userPass;}/** * @param userPass the userPass to set */public void setUserPass(String userPass) {this.userPass = userPass;}}

package cn.my.utils; import java.util.Date;import java.util.List;import java.util.Properties;import javax.activation.DataHandler;import javax.activation.FileDataSource;import javax.mail.BodyPart;import javax.mail.MessagingException;import javax.mail.Multipart;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 javax.mail.internet.MimeMessage.RecipientType; /** * 简单邮件发送器,可单发,群发@date 2014.10.13。 * @author wangbowen * @version 1.0 *  */public class SimpleMailSender {     /**     * 发送邮件的props文件     */     public  Properties props;     /**      * DUANKOU      */     public static final int mailserverport = 25;    /**     * 邮件服务器登录验证     */     public transient MailAuthenticator authenticator;     /**     * 邮箱session     */     public  Session session;               public Transport transport;     /**     * 初始化邮件发送器     *      * @param smtpHostName     *                SMTP邮件服务器地址     * @param username     *                发送邮件的用户名(地址)     * @param password     *                发送邮件的密码     */    public SimpleMailSender(final String smtpHostName, final String username,        final String password) {    init(username, password, smtpHostName);    }     /**     * 初始化邮件发送器     *      * @param username     *                发送邮件的用户名(地址),并以此解析SMTP服务器地址     * @param password     *                发送邮件的密码     */    public SimpleMailSender(final String username, final String password) {    //通过邮箱地址解析出smtp服务器,对大多数邮箱都管用     String str = username.split("@")[1];     String smtpHostName  = "smtp." +str;    init(username, password, smtpHostName);     }     /**     * 初始化     *      * @param username     *                发送邮件的用户名(地址)     * @param password     *                密码     * @param smtpHostName     *                SMTP主机地址     */    private void init(String username, String password, String smtpHostName) {        // 初始化props    props = new Properties();        props.put("mail.smtp.host", smtpHostName);        props.put("mail.smtp.port",String.valueOf(mailserverport) );        props.put("mail.smtp.starttls.enable","true" );        props.put("mail.smtp.auth", "true");        props.put("mail.smtp.socketFactory.port", String.valueOf(mailserverport));        props.put("mail.smtp.socketFactory.fallback", "false");        props.put("mail.transport.protocol", "smtp");        props.put("mail.from", username);        LoggerUtils.info("初始化props成功....");        // 验证        authenticator = new MailAuthenticator(username, password);        // 创建session        session = Session.getDefaultInstance(props, authenticator);     }     /**     * 发送邮件     *      * @param recipient     *                收件人邮箱地址     * @param subject     *                邮件主题     * @param content     *                邮件内容     * @throws AddressException     * @throws MessagingException     */    @SuppressWarnings("static-access")public void sendOne(String recipient, String subject, Object content)        throws AddressException, MessagingException {    // 创建mime类型邮件    final MimeMessage  message = new MimeMessage(session);    // 设置发信人    message.setFrom(new InternetAddress(authenticator.getUserName()));    // 设置收件人    message.setRecipient(RecipientType.TO, new InternetAddress(recipient));    // 设置主题    message.setSubject(subject);    // 设置邮件内容    message.setContent(content.toString(), "text/html;charset=utf-8");    message.saveChanges();    // 发送    transport = session.getTransport((String) props.get("mail.transport.protocol"));      // 真正的连接邮件服务器并进行身份验证      transport.connect("smtp."+authenticator.getUserName().split("@")[1],authenticator.getUserName(),authenticator.getUserPass());      transport.send(message);          }     /**     * 群发邮件     *      * @param recipients     *                收件人们     * @param subject     *                主题     * @param content     *                内容     * @throws AddressException     * @throws MessagingException     */@SuppressWarnings("static-access")public boolean send(List<String> recipients, String subject, Object content)        throws AddressException, MessagingException {     try{    // 创建mime类型邮件    final MimeMessage message = new MimeMessage(session);    // 设置发信人    message.setFrom(new InternetAddress(authenticator.getUserName()));    // 设置收件人们    final int num = recipients.size();    InternetAddress[] addresses = new InternetAddress[num];    for (int i = 0; i < num; i++) {        addresses[i] = new InternetAddress(recipients.get(i));    }    message.setRecipients(RecipientType.TO, addresses);    // 设置主题    message.setSubject(subject);    // 设置邮件内容    message.setContent(content.toString(), "text/html;charset=utf-8");    //发送时间    message.setSentDate(new Date());    message.saveChanges();      // 发送    transport = session.getTransport((String) props.get("mail.transport.protocol"));      // 真正的连接邮件服务器并进行身份验证      transport.connect("smtp."+authenticator.getUserName().split("@")[1],authenticator.getUserName(),authenticator.getUserPass());      transport.send(message);      LoggerUtils.info("发送成功....");     transport.close();     }catch(Exception e){     e.printStackTrace();     LoggerUtils.info("发送失败....");     return false;     }     return true;    }     /**     * 群发邮件含附件     *      * @param recipients     *                收件人们     * @param subject     *                主题     * @param content     *                内容     * @param filepath 附件     * @throws AddressException     * @throws MessagingException     */@SuppressWarnings("static-access")public boolean sendMail(List<String> recipients, String subject, Object content,String filepath)        throws AddressException, MessagingException {     try{    // 创建mime类型邮件    final MimeMessage message = new MimeMessage(session);    // 设置发信人    message.setFrom(new InternetAddress(authenticator.getUserName()));    // 设置收件人们    final int num = recipients.size();    InternetAddress[] addresses = new InternetAddress[num];    for (int i = 0; i < num; i++) {        addresses[i] = new InternetAddress(recipients.get(i));    }    message.setRecipients(RecipientType.TO, addresses);    // 设置主题    message.setSubject(subject);    Multipart m = new MimeMultipart();    BodyPart bp = new MimeBodyPart();    bp.setContent(content.toString(), "text/html; charset=utf-8");    // 加入附件    FileDataSource ds = new FileDataSource(filepath);    bp.setDataHandler(new DataHandler(ds));    bp.setFileName(MimeUtility.encodeText(ds.getName()));    m.addBodyPart(bp);   // 设置邮件内容    message.setContent(m);    //发送时间    message.setSentDate(new Date());    message.saveChanges();      // 发送    transport = session.getTransport((String) props.get("mail.transport.protocol"));      // 真正的连接邮件服务器并进行身份验证      transport.connect("smtp."+authenticator.getUserName().split("@")[1],authenticator.getUserName(),authenticator.getUserPass());      transport.send(message);      LoggerUtils.info("发送成功....");     transport.close();     }catch(Exception e){     e.printStackTrace();     LoggerUtils.info("发送失败....");     return false;     }     return true;    }        /**     * 发送邮件     *      * @param recipient     *                收件人邮箱地址     * @param mail     *                邮件对象     * @throws AddressException     * @throws MessagingException     */    public void send(String recipient, SimpleMail mail)        throws AddressException, MessagingException {    sendOne(recipient, mail.getSubject(), mail.getContent());    }     /**     * 群发邮件     *      * @param recipients     *                收件人们     * @param mail     *                邮件对象     * @throws AddressException     * @throws MessagingException     */    public boolean sendMails(SimpleMail mail)        throws AddressException, MessagingException {      boolean sendResult =  send(mail.getRecipients(),mail.getSubject(), mail.getContent());      if(sendResult){      return true;      }      return false;    }    /**     * 异步发送邮件     * @param mail 邮件对象     * @return     */    public void sendMailByAsynchronous(final SimpleMail mail){     new Thread(new Runnable() {               public void run() {                   try {                   send(mail.getRecipients(),mail.getSubject(), mail.getContent());                  } catch (Exception ex) {                       LoggerUtils.error("邮件发送失败"+ex);                   }               }           }).start();    }}

package cn.my.utils;import java.util.ArrayList;import java.util.List;import javax.mail.MessagingException;import javax.mail.internet.AddressException;/** * 测试邮件发送 * @author wangbowen * */public class test {public static void main(String[] args) {try {//分割邮件String [] arrayemail ={"1213@qq.com","45555@qq.com"};//接受邮件者List<String> recipients = new ArrayList<String>();for (int j = 0; j < arrayemail.length; j++) {<span style="white-space:pre"></span>recipients.add(arrayemail[j]);<span style="white-space:pre"></span>}//从properties文件中读取邮件发送者的邮箱以及密码String userName = PropertiesUtil.findData("usermail.properties", "mail.username");   String password = PropertiesUtil.findData("usermail.properties", "mail.password");SimpleMailSender sm = new SimpleMailSender(userName,password);sm.sendMails(new SimpleMail(recipients,"通知","成功"));} catch (AddressException e) {// TODO Auto-generated catch blocke.printStackTrace();} catch (MessagingException e) {// TODO Auto-generated catch blocke.printStackTrace();}}}

5.mail.properties文件,可以根据你自己的需要设置相应的用户邮箱和密码
mail.username=1212222@163.commail.password=123456

6.注意:使用qq邮箱发送邮件需要设置SMTP开启服务

第一步,看图操作如下:

打开QQ邮箱,在设置-帐户,然后再看下图示:

把:POP3/SMTP服务,IMAP/SMTP服务,Exchange服务,CardDAV/CalDAV服务都选择上,保存这样,便可以轻松使用邮箱客户端来收发QQ邮件了!相关OUTLOOK设置如下:

可以看到,填写好接收邮件服务器:pop.qq.com,发送邮件服务器:smtp.qq.com;然后用户名与密码,设置好了后,便可以收QQ邮件了;


<
0 0
原创粉丝点击