利用Java代碼群發(fā)郵件

利用java代碼發(fā)送郵件,結(jié)合網(wǎng)上搜來的資料,我適當(dāng)進(jìn)行了改造,改為利用java代碼群發(fā)郵件.現(xiàn)將代碼復(fù)制整理如下:

注意事項(xiàng):

純java開發(fā)的話,JDK1.6以外庸推,需要導(dǎo)入這里自己打包的mail.jar.另外前三個(gè)類必須放同一包中。當(dāng)然如果是javaEE枕赵,你完全不用擔(dān)心了,直接建類復(fù)制,或者下載用都行)吧秕。

第一個(gè)類 : 郵件發(fā)送類
package com.crt.settlement.service.test;

import java.util.Properties;
/**
 * 郵件發(fā)送類
 *
 */
public class MailSenderInfo {
     // 發(fā)送郵件的服務(wù)器的IP(或主機(jī)地址)
     private String mailServerHost;
     // 發(fā)送郵件的服務(wù)器的端口
     private String mailServerPort;
     // 發(fā)件人郵箱地址
     private String fromAddress;
     // 收件人郵箱地址
     private String toAddress;
     // 登陸郵件發(fā)送服務(wù)器的用戶名
     private String userName;
     // 登陸郵件發(fā)送服務(wù)器的密碼
     private String password;
     // 是否需要身份驗(yàn)證
     private boolean validate = false;
     // 郵件主題
     private String subject;
     // 郵件的文本內(nèi)容
     private String content;
     // 郵件附件的文件名
     private String[] attachFileNames;
     
     public Properties getProperties() {
      Properties p = new Properties();
      p.put("mail.smtp.host", this.mailServerHost);
      p.put("mail.smtp.port", this.mailServerPort);
      //設(shè)置是否安全驗(yàn)證,默認(rèn)為false,一般情況都設(shè)置為true
      p.put("mail.smtp.auth", validate ? "true" : "false");  
      return p;
     }
     public String getMailServerHost() {
      return mailServerHost;
     }
     public void setMailServerHost(String mailServerHost) {
      this.mailServerHost = mailServerHost;
     }
     public String getMailServerPort() {
      return mailServerPort;
     }
     public void setMailServerPort(String mailServerPort) {
      this.mailServerPort = mailServerPort;
     }
     public boolean isValidate() {
      return validate;
     }
     public void setValidate(boolean validate) {
      this.validate = validate;
     }
     public String[] getAttachFileNames() {
      return attachFileNames;
     }
     public void setAttachFileNames(String[] fileNames) {
      this.attachFileNames = fileNames;
     }
     public String getFromAddress() {
      return fromAddress;
     }
     public void setFromAddress(String fromAddress) {
      this.fromAddress = fromAddress;
     }
     public String getPassword() {
      return password;
     }
     public void setPassword(String password) {
      this.password = password;
     }
     public String getToAddress() {
      return toAddress;
     }
     public void setToAddress(String toAddress) {
      this.toAddress = toAddress;
     }
     public String getUserName() {
      return userName;
     }
     public void setUserName(String userName) {
      this.userName = userName;
     }
     public String getSubject() {
      return subject;
     }
     public void setSubject(String subject) {
      this.subject = subject;
     }
     public String getContent() {
      return content;
     }
     public void setContent(String textContent) {
      this.content = textContent;
     }
}

第二個(gè)類 : 發(fā)送郵件類
package com.crt.settlement.service.test;

import java.util.Date;
import java.util.Properties;

import javax.mail.Address;
import javax.mail.BodyPart;
import javax.mail.Message;
import javax.mail.MessagingException;
import javax.mail.Multipart;
import javax.mail.Session;
import javax.mail.Transport;
import javax.mail.internet.InternetAddress;
import javax.mail.internet.MimeBodyPart;
import javax.mail.internet.MimeMessage;
import javax.mail.internet.MimeMultipart;

/**
 * 發(fā)送郵件的類
 * 
 *
 */
public class SimpleMailSender {
    public boolean sendTextMail(MailSenderInfo mailInfo) {
        // 判斷是否需要身份認(rèn)證
        MyAuthenticator authenticator = null;
        Properties pro = mailInfo.getProperties();
        if (mailInfo.isValidate()) {
            // 如果需要身份認(rèn)證,則創(chuàng)建一個(gè)密碼驗(yàn)證器
            authenticator = new MyAuthenticator(mailInfo.getUserName(), mailInfo.getPassword());
        }
        // 根據(jù)郵件會(huì)話屬性和密碼驗(yàn)證器構(gòu)造一個(gè)發(fā)送郵件的session
        Session sendMailSession = Session.getDefaultInstance(pro, authenticator);
        try {
            // 根據(jù)session創(chuàng)建一個(gè)郵件消息
            Message mailMessage = new MimeMessage(sendMailSession);
            // 創(chuàng)建郵件發(fā)送者地址
            Address from = new InternetAddress(mailInfo.getFromAddress());
            // 設(shè)置郵件消息的發(fā)送者
            mailMessage.setFrom(from);
            // 創(chuàng)建郵件的接收者地址迹炼,并設(shè)置到郵件消息中
            // 發(fā)送給多人
            String toList = getMailList(mailInfo.getToAddress().split(","));
            InternetAddress[] iaToList = new InternetAddress().parse(toList);
            // Message.RecipientType.TO屬性表示接收者的類型為TO
            mailMessage.setRecipients(Message.RecipientType.TO, iaToList);
            
            // 設(shè)置郵件消息的主題
            mailMessage.setSubject(mailInfo.getSubject());
            // 設(shè)置郵件消息發(fā)送的時(shí)間
            mailMessage.setSentDate(new Date());
            // 設(shè)置郵件消息的主要內(nèi)容
            String mailContent = mailInfo.getContent();
            mailMessage.setText(mailContent);
            mailMessage.saveChanges();
            // 發(fā)送郵件
            Transport.send(mailMessage);
            return true;
        } catch (MessagingException ex) {
            ex.printStackTrace();
        }
        return false;
    }

    public static boolean sendHtmlMail(MailSenderInfo mailInfo) {
        // 判斷是否需要身份認(rèn)證
        MyAuthenticator authenticator = null;
        Properties pro = mailInfo.getProperties();
        // 如果需要身份認(rèn)證砸彬,則創(chuàng)建一個(gè)密碼驗(yàn)證器
        if (mailInfo.isValidate()) {
            authenticator = new MyAuthenticator(mailInfo.getUserName(), mailInfo.getPassword());
        }
        // 根據(jù)郵件會(huì)話屬性和密碼驗(yàn)證器構(gòu)造一個(gè)發(fā)送郵件的session
        Session sendMailSession = Session.getDefaultInstance(pro, authenticator);
        try {
            // 根據(jù)session創(chuàng)建一個(gè)郵件消息
            Message mailMessage = new MimeMessage(sendMailSession);
            // 創(chuàng)建郵件發(fā)送者地址
            Address from = new InternetAddress(mailInfo.getFromAddress());
            // 設(shè)置郵件消息的發(fā)送者
            mailMessage.setFrom(from);
            // 創(chuàng)建郵件的接收者地址,并設(shè)置到郵件消息中

            // 發(fā)送給多人
            String toList = getMailList(mailInfo.getToAddress().split(","));
            InternetAddress[] iaToList = new InternetAddress().parse(toList);
            // Message.RecipientType.TO屬性表示接收者的類型為TO
            mailMessage.setRecipients(Message.RecipientType.TO, iaToList);
            // 設(shè)置郵件消息的主題
            mailMessage.setSubject(mailInfo.getSubject());
            // 設(shè)置郵件消息發(fā)送的時(shí)間
            mailMessage.setSentDate(new Date());
            // MiniMultipart類是一個(gè)容器類斯入,包含MimeBodyPart類型的對(duì)象
            Multipart mainPart = new MimeMultipart();
            // 創(chuàng)建一個(gè)包含HTML內(nèi)容的MimeBodyPart
            BodyPart html = new MimeBodyPart();
            // 設(shè)置HTML內(nèi)容
            html.setContent(mailInfo.getContent(), "text/html; charset=utf-8");
            mainPart.addBodyPart(html);
            // 將MiniMultipart對(duì)象設(shè)置為郵件內(nèi)容
            mailMessage.setContent(mainPart);
            mailMessage.saveChanges();
            // 發(fā)送郵件
            Transport.send(mailMessage);
            return true;
        } catch (MessagingException ex) {
            ex.printStackTrace();
        }
        return false;
    }

    private static String getMailList(String[] mailArray) {

        StringBuffer toList = new StringBuffer();
        int length = mailArray.length;
        if (mailArray != null && length < 2) {
            toList.append(mailArray[0]);
        } else {
            for (int i = 0; i < length; i++) {
                toList.append(mailArray[i]);
                if (i != (length - 1)) {
                    toList.append(",");
                }

            }
        }
        return toList.toString();

    }
}

第三個(gè)類 : 郵件認(rèn)證器
package com.crt.settlement.service.test;

import javax.mail.Authenticator;
import javax.mail.PasswordAuthentication;

/**
 * 郵件用戶名和密碼認(rèn)證器
 *
 */
public class MyAuthenticator extends Authenticator{
     String userName = null;
     String password = null;
     public MyAuthenticator() {
     }
     public MyAuthenticator(String username, String password) {
      this.userName = username;
      this.password = password;
     }
     protected PasswordAuthentication getPasswordAuthentication() {
      return new PasswordAuthentication(userName, password);
     }
}

第四個(gè)類 : 測(cè)試類:

需要注意砂碉,當(dāng)中需要自己修改的地方都已經(jīng)做了配置,值的一提的事:

  1. 服務(wù)器的ip和port是在網(wǎng)上可以輕松查到的刻两,您需要用什么郵箱發(fā)增蹭,就設(shè)置成對(duì)應(yīng)郵箱的服務(wù)器。

  2. 發(fā)郵件別用剛申請(qǐng)的郵箱磅摹,一般剛申請(qǐng)的郵箱是不會(huì)給你這個(gè)權(quán)限的滋迈,要不就是需要綁定,要不就是有一定期限户誓。建議測(cè)試時(shí)用自己已經(jīng)用過很久的qq郵箱或者163等其他郵箱饼灿。

  3. 對(duì)于使用qq郵箱發(fā)送,需要在QQ郵箱中進(jìn)行如下設(shè)置上的更改:在登錄QQ郵箱后臺(tái)在"設(shè)置"=》賬號(hào)中開啟POP3/SMTP服務(wù) ,如下圖所示:

    QQ 郵箱通過生成授權(quán)碼來設(shè)置密碼:
package com.crt.settlement.service.test;


/**
 * 設(shè)置數(shù)據(jù),開始發(fā)送
 *
 */
public class SendMailDemo {
     public static void main(String[] args) {
          // 設(shè)置郵件服務(wù)器信息
          MailSenderInfo mailInfo = new MailSenderInfo();
          mailInfo.setMailServerHost("smtp.qq.com");// 發(fā)送郵件的服務(wù)器的IP(或主機(jī)地址)
          mailInfo.setMailServerPort("587");
         // mailInfo.setMailServerHost("smtp.163.com");// 發(fā)送郵件的163服務(wù)器的IP(或主機(jī)地址)
         // mailInfo.setMailServerPort("25");
          
          mailInfo.setValidate(true);
          
          // 郵箱用戶名(根據(jù)自己情況設(shè)置)
          mailInfo.setUserName("91***01183@qq.com");
          // 郵箱密碼(根據(jù)自己情況設(shè)置)(注意此處密碼為授權(quán)碼)
          mailInfo.setPassword("rueqjpdgcvrgbbje");
          // 發(fā)件人郵箱(根據(jù)自己情況設(shè)置,如果你沒對(duì)郵箱進(jìn)行特別設(shè)置,應(yīng)該和郵箱用戶名一致)
          mailInfo.setFromAddress("91***01183@qq.com");
          // 收件人郵箱(根據(jù)自己情況設(shè)置)
          //設(shè)置為發(fā)送給多人
          mailInfo.setToAddress("xidahuanghui@163.com,7633434534@qq.com");
          
          // 郵件標(biāo)題
          mailInfo.setSubject("測(cè)試Java發(fā)送郵件");
          // 郵件內(nèi)容
          StringBuffer buffer = new StringBuffer();
          buffer.append("地址:");
          buffer.append("測(cè)試測(cè)試測(cè)試");
          mailInfo.setContent(buffer.toString());
          // 發(fā)送郵件
          SimpleMailSender sms = new SimpleMailSender();
          
          // 發(fā)送文體格式
          sms.sendTextMail(mailInfo);
          // 發(fā)送html格式
          SimpleMailSender.sendHtmlMail(mailInfo);
          
          System.out.println("郵件發(fā)送完畢");
         }
}

參考文檔:
  1. java發(fā)送郵件 http://www.cnblogs.com/AK-BB/p/java_sender_email.html
  2. javamail向多人發(fā)送郵件例子代碼 http://itspace.iteye.com/blog/558992
  3. java發(fā)送郵件 http://www.runoob.com/java/java-sending-email.html
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末帝美,一起剝皮案震驚了整個(gè)濱河市碍彭,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌悼潭,老刑警劉巖庇忌,帶你破解...
    沈念sama閱讀 212,686評(píng)論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異舰褪,居然都是意外死亡皆疹,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,668評(píng)論 3 385
  • 文/潘曉璐 我一進(jìn)店門占拍,熙熙樓的掌柜王于貴愁眉苦臉地迎上來墙基,“玉大人,你說我怎么就攤上這事刷喜〔兄疲” “怎么了?”我有些...
    開封第一講書人閱讀 158,160評(píng)論 0 348
  • 文/不壞的土叔 我叫張陵掖疮,是天一觀的道長(zhǎng)初茶。 經(jīng)常有香客問我,道長(zhǎng),這世上最難降的妖魔是什么恼布? 我笑而不...
    開封第一講書人閱讀 56,736評(píng)論 1 284
  • 正文 為了忘掉前任螺戳,我火速辦了婚禮,結(jié)果婚禮上折汞,老公的妹妹穿的比我還像新娘倔幼。我一直安慰自己,他們只是感情好爽待,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,847評(píng)論 6 386
  • 文/花漫 我一把揭開白布损同。 她就那樣靜靜地躺著,像睡著了一般鸟款。 火紅的嫁衣襯著肌膚如雪膏燃。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 50,043評(píng)論 1 291
  • 那天何什,我揣著相機(jī)與錄音组哩,去河邊找鬼。 笑死处渣,一個(gè)胖子當(dāng)著我的面吹牛伶贰,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播罐栈,決...
    沈念sama閱讀 39,129評(píng)論 3 410
  • 文/蒼蘭香墨 我猛地睜開眼黍衙,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來了悠瞬?” 一聲冷哼從身側(cè)響起们豌,我...
    開封第一講書人閱讀 37,872評(píng)論 0 268
  • 序言:老撾萬榮一對(duì)情侶失蹤涯捻,失蹤者是張志新(化名)和其女友劉穎浅妆,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體障癌,經(jīng)...
    沈念sama閱讀 44,318評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡凌外,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,645評(píng)論 2 327
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了涛浙。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片康辑。...
    茶點(diǎn)故事閱讀 38,777評(píng)論 1 341
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖轿亮,靈堂內(nèi)的尸體忽然破棺而出疮薇,到底是詐尸還是另有隱情,我是刑警寧澤我注,帶...
    沈念sama閱讀 34,470評(píng)論 4 333
  • 正文 年R本政府宣布按咒,位于F島的核電站,受9級(jí)特大地震影響但骨,放射性物質(zhì)發(fā)生泄漏励七。R本人自食惡果不足惜智袭,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 40,126評(píng)論 3 317
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望掠抬。 院中可真熱鬧吼野,春花似錦、人聲如沸两波。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,861評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽雨女。三九已至谚攒,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間氛堕,已是汗流浹背馏臭。 一陣腳步聲響...
    開封第一講書人閱讀 32,095評(píng)論 1 267
  • 我被黑心中介騙來泰國(guó)打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留讼稚,地道東北人括儒。 一個(gè)月前我還...
    沈念sama閱讀 46,589評(píng)論 2 362
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像锐想,于是被迫代替她去往敵國(guó)和親帮寻。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,687評(píng)論 2 351

推薦閱讀更多精彩內(nèi)容

  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理赠摇,服務(wù)發(fā)現(xiàn)固逗,斷路器,智...
    卡卡羅2017閱讀 134,637評(píng)論 18 139
  • Android 自定義View的各種姿勢(shì)1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 171,858評(píng)論 25 707
  • 今天給單位退休職工體檢藕帜,看到久不見面的王主任烫罩,一臉慈笑,穿著紫色的開口毛衫洽故,綠色格子毛妮裙子贝攒,酒紅色大衣,一改...
    禾木林月閱讀 242評(píng)論 0 1
  • 2017年5月4日刀诬。國(guó)際青年節(jié)咽扇,我怎么覺得自己是一個(gè)青年的年齡,老年的心? 大學(xué)讀了四年肌割,有時(shí)候覺得自己可能做了一...
    INA一只會(huì)飛的豬閱讀 583評(píng)論 0 0