使用java程序模擬本地發(fā)送郵件+案例:服務(wù)器自動(dòng)發(fā)送生日祝福

首先攒射,我們需要準(zhǔn)備一些工作猜惋,在本地安裝郵件服務(wù)器跟客戶端
這里我安裝的是foxmail的客戶端侧漓、易游的郵件服務(wù)器
使用的發(fā)送與接收協(xié)議與市場(chǎng)上的郵箱相同缺前,分別是:
接受郵件的協(xié)議:POP3 IMAP
發(fā)送郵件的協(xié)議:SMTP


image.png

接著我們?cè)谝子蔚泥]件服務(wù)器上建立兩個(gè)新的用戶:


image.png

再在foxmail上添加這兩個(gè)用戶:
image.png

現(xiàn)在我們就可以在本地模擬手動(dòng)發(fā)送郵件了蛀醉,但是我們是要用程序代碼完成發(fā)送操作:
因?yàn)閷?shí)現(xiàn)郵件發(fā)送操作的相關(guān)接口在外部的jar包里,我們先工程里導(dǎo)入相關(guān)jar包:


image.png

再編寫(xiě)相關(guān)類文件代碼:

package com.zys.mail;

import java.util.Properties;

import javax.mail.Authenticator;
import javax.mail.Message;
import javax.mail.MessagingException;
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.MimeMessage;
import javax.mail.internet.MimeMessage.RecipientType;

public class MailUtils {

    //email:郵件發(fā)給誰(shuí) subject:主題 emailMsg:郵件的內(nèi)容
    public static void sendMail(String email, String subject, String emailMsg)
            throws AddressException, MessagingException {
        
        // 1.創(chuàng)建一個(gè)程序與郵件服務(wù)器會(huì)話對(duì)象 Session
        Properties props = new Properties();
        props.setProperty("mail.transport.protocol", "SMTP");//發(fā)郵件的協(xié)議
        props.setProperty("mail.host", "localhost");//發(fā)郵件的服務(wù)器地址
        props.setProperty("mail.smtp.auth", "true");// 指定驗(yàn)證為true

        // 創(chuàng)建驗(yàn)證器
        Authenticator auth = new Authenticator() {
            public PasswordAuthentication getPasswordAuthentication() {
                return new PasswordAuthentication("victory@zys.com", "12345");//發(fā)郵件的賬號(hào)驗(yàn)證
            }
        };

        Session session = Session.getInstance(props, auth);

        // 2.創(chuàng)建一個(gè)Message衅码,它相當(dāng)于是郵件內(nèi)容
        Message message = new MimeMessage(session);

        message.setFrom(new InternetAddress("victory@zys.com")); // 設(shè)置發(fā)送者

        message.setRecipient(RecipientType.TO, new InternetAddress(email)); // 設(shè)置發(fā)送方式與接收者

        message.setSubject(subject);//郵件的主題

        message.setContent(emailMsg, "text/html;charset=utf-8");

        // 3.創(chuàng)建 Transport用于將郵件發(fā)送

        Transport.send(message);
    }
}

最后在主函數(shù)中編寫(xiě)運(yùn)行代碼拯刁,就可以實(shí)現(xiàn)郵件發(fā)送了:

package com.zys.mail;

import javax.mail.MessagingException;
import javax.mail.internet.AddressException;

public class SendMailTest {
    
    public static void main(String[] args) throws AddressException, MessagingException {
        
        MailUtils.sendMail("iverson@zys.com", "測(cè)試代碼發(fā)送郵件", "好的,現(xiàn)在我們成功實(shí)現(xiàn)通過(guò)代碼發(fā)送郵件逝段!");
        
    }
}

案例:服務(wù)器自動(dòng)發(fā)送生日祝福

通過(guò)配置監(jiān)聽(tīng)器ServletContextListener,在服務(wù)器啟動(dòng)時(shí)就初始化
實(shí)現(xiàn)代碼如下:

package com.zys.birthday;

import java.sql.SQLException;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.List;
import java.util.Timer;
import java.util.TimerTask;

import javax.mail.MessagingException;
import javax.mail.internet.AddressException;
import javax.servlet.ServletContextEvent;
import javax.servlet.ServletContextListener;

import org.apache.commons.dbutils.QueryRunner;
import org.apache.commons.dbutils.handlers.BeanListHandler;
import org.apache.commons.dbutils.handlers.ColumnListHandler;

import com.zys.domain.User;
import com.zys.mail.MailUtils;

public class BirthdayListaner implements ServletContextListener{

    @Override
    public void contextDestroyed(ServletContextEvent arg0) {
        // TODO 自動(dòng)生成的方法存根
        
    }

    @Override
    public void contextInitialized(ServletContextEvent arg0) {
        // 當(dāng)web應(yīng)用啟動(dòng) 開(kāi)啟任務(wù)調(diào)動(dòng)---功能在用戶的生日當(dāng)天發(fā)送郵件
        //開(kāi)啟一個(gè)定時(shí)器
        Timer timer = new Timer();
        timer.scheduleAtFixedRate(new TimerTask() {
            
            @Override
            public void run() {
                // 為當(dāng)天生日的用戶發(fā)郵件
                //1垛玻、獲得今天過(guò)生日的人
                //獲得今天的日期
                SimpleDateFormat format = new SimpleDateFormat("MM-dd");
                String currentDate = format.format(new Date());
                //根據(jù)當(dāng)前時(shí)間從數(shù)據(jù)庫(kù)中擦尋今天過(guò)生日的人
                QueryRunner runner = new QueryRunner(DataSourceUtils.getDataSource());
                String sql="select * from user where birthday like ?";
                List<User> userList = null;
                try {
                    userList = runner.query(sql, new BeanListHandler<User>(User.class), "%"+currentDate+"%");
                } catch (SQLException e) {
                    // TODO 自動(dòng)生成的 catch 塊
                    e.printStackTrace();
                }//01-26
                //2割捅、發(fā)郵件
                if(userList!=null&&userList.size()>0){
                    for(User user : userList){
                        String emailMsg = "親愛(ài)的:"+user.getName()+",今天是您的生日,祝您生日快樂(lè)哦帚桩!";
                        try {
                            MailUtils.sendMail(user.getEmail(), "生日祝福", emailMsg);
                            System.out.println(user.getName()+"郵件發(fā)送完畢亿驾!");
                        } catch (AddressException e) {
                            // TODO 自動(dòng)生成的 catch 塊
                            e.printStackTrace();
                        } catch (MessagingException e) {
                            // TODO 自動(dòng)生成的 catch 塊
                            e.printStackTrace();
                        }
                    }
                }
            }
        }, new Date(), 1000*60);
        //實(shí)際開(kāi)發(fā)中起始時(shí)間是一個(gè)固定的時(shí)間
        //實(shí)際開(kāi)發(fā)中間隔時(shí)間是1天,每天給過(guò)生日的用戶發(fā)送
        
    }
    
    
    
}

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末账嚎,一起剝皮案震驚了整個(gè)濱河市莫瞬,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌郭蕉,老刑警劉巖疼邀,帶你破解...
    沈念sama閱讀 222,681評(píng)論 6 517
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異恳不,居然都是意外死亡檩小,警方通過(guò)查閱死者的電腦和手機(jī)开呐,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 95,205評(píng)論 3 399
  • 文/潘曉璐 我一進(jìn)店門烟勋,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人筐付,你說(shuō)我怎么就攤上這事卵惦。” “怎么了瓦戚?”我有些...
    開(kāi)封第一講書(shū)人閱讀 169,421評(píng)論 0 362
  • 文/不壞的土叔 我叫張陵沮尿,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我较解,道長(zhǎng)畜疾,這世上最難降的妖魔是什么? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 60,114評(píng)論 1 300
  • 正文 為了忘掉前任印衔,我火速辦了婚禮啡捶,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘奸焙。我一直安慰自己瞎暑,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 69,116評(píng)論 6 398
  • 文/花漫 我一把揭開(kāi)白布与帆。 她就那樣靜靜地躺著了赌,像睡著了一般。 火紅的嫁衣襯著肌膚如雪玄糟。 梳的紋絲不亂的頭發(fā)上勿她,一...
    開(kāi)封第一講書(shū)人閱讀 52,713評(píng)論 1 312
  • 那天,我揣著相機(jī)與錄音阵翎,去河邊找鬼逢并。 笑死播揪,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的筒狠。 我是一名探鬼主播猪狈,決...
    沈念sama閱讀 41,170評(píng)論 3 422
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼辩恼!你這毒婦竟也來(lái)了雇庙?” 一聲冷哼從身側(cè)響起,我...
    開(kāi)封第一講書(shū)人閱讀 40,116評(píng)論 0 277
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤灶伊,失蹤者是張志新(化名)和其女友劉穎疆前,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體聘萨,經(jīng)...
    沈念sama閱讀 46,651評(píng)論 1 320
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡竹椒,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,714評(píng)論 3 342
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了米辐。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片胸完。...
    茶點(diǎn)故事閱讀 40,865評(píng)論 1 353
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖翘贮,靈堂內(nèi)的尸體忽然破棺而出赊窥,到底是詐尸還是另有隱情,我是刑警寧澤狸页,帶...
    沈念sama閱讀 36,527評(píng)論 5 351
  • 正文 年R本政府宣布锨能,位于F島的核電站,受9級(jí)特大地震影響芍耘,放射性物質(zhì)發(fā)生泄漏址遇。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 42,211評(píng)論 3 336
  • 文/蒙蒙 一斋竞、第九天 我趴在偏房一處隱蔽的房頂上張望倔约。 院中可真熱鬧,春花似錦窃页、人聲如沸跺株。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 32,699評(píng)論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)乒省。三九已至,卻和暖如春畦木,著一層夾襖步出監(jiān)牢的瞬間袖扛,已是汗流浹背。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 33,814評(píng)論 1 274
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留蛆封,地道東北人唇礁。 一個(gè)月前我還...
    沈念sama閱讀 49,299評(píng)論 3 379
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像惨篱,于是被迫代替她去往敵國(guó)和親盏筐。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,870評(píng)論 2 361

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

  • 本文包括:1砸讳、名詞解釋2琢融、郵件收發(fā)過(guò)程3、JavaMail 知識(shí)概要4簿寂、發(fā)送一封符合 MIME 協(xié)議的 JavaM...
    廖少少閱讀 4,037評(píng)論 2 13
  • 從三月份找實(shí)習(xí)到現(xiàn)在漾抬,面了一些公司,掛了不少常遂,但最終還是拿到小米纳令、百度、阿里克胳、京東平绩、新浪、CVTE毯欣、樂(lè)視家的研發(fā)崗...
    時(shí)芥藍(lán)閱讀 42,280評(píng)論 11 349
  • 五馒过、電子郵件 1.電子郵件概述 一個(gè)電子郵件系統(tǒng)應(yīng)具有三個(gè)主要組成構(gòu)件:用戶代理臭脓、郵件服務(wù)器酗钞、郵件發(fā)送協(xié)議(如SM...
    dmmy大印閱讀 990評(píng)論 0 1
  • 一砚作、郵件開(kāi)發(fā)涉及到的一些基本概念 郵件服務(wù)器和電子郵箱 郵件傳輸協(xié)議 電子郵件的發(fā)送和接收過(guò)程 1.1郵件服務(wù)器和...
    yjaal閱讀 1,478評(píng)論 0 7
  • 漫長(zhǎng)的歲月,忘不了的依舊忘不了嘹锁。 漫長(zhǎng)的歲月葫录,不愛(ài)的依舊不愛(ài)。 在這漫長(zhǎng)的歲月里领猾,我?guī)缀跻詾槲乙呀?jīng)忘記了你米同。 曾經(jīng)...
    謝丹儒閱讀 322評(píng)論 0 1