从0搭建一个邮件服务器(用于邮件推送以及邮件群发业务)
從0搭建一個(gè)郵件服務(wù)器(用于郵件推送以及郵件群發(fā)業(yè)務(wù))
本文講述如何方便快捷搭建一個(gè)郵件服務(wù)器,由于本人論文以及實(shí)習(xí)公司需要,將會(huì)言簡(jiǎn)意賅的搭建一個(gè)郵件服務(wù)器來(lái)實(shí)現(xiàn)所需功能,以下是實(shí)現(xiàn)效果圖,本文略接地氣請(qǐng)忽略,由于是第一次寫(xiě)文章,所有不懂的細(xì)節(jié)均可私聊作者
圖1、郵件群發(fā)
圖2、郵件推送(每日推送當(dāng)?shù)貙?shí)時(shí)天氣)
這里需要注意的是,注意看我的郵箱名稱是 day_day_up_up@taxwhale.com, 這個(gè)名詞不論是@后面的名稱也好,都是可以隨便取的,對(duì)方根本不知道這是誰(shuí)的郵箱
準(zhǔn)備工具:
1、一臺(tái)服務(wù)器
(注意事項(xiàng):本文用的是第三方服務(wù)器,是開(kāi)放25端口的金山云服務(wù)器,如果是阿里巴巴騰訊的云服務(wù)器,需要申請(qǐng)25端口解封,一般審核很困難,且不能群發(fā)垃圾郵件,否則云服務(wù)器會(huì)被封禁,具體還有哪些細(xì)則可以私聊作者)
我用的是金山云服務(wù)器,因?yàn)榻鹕皆茮](méi)有限制25端口,這決定了你是否可以自己創(chuàng)建郵箱賬號(hào)來(lái)發(fā)送郵件,如果你使用465端口,那么你只能做郵件轉(zhuǎn)發(fā)業(yè)務(wù)
實(shí)現(xiàn)工作1:搭建郵件服務(wù)器
1、給云服務(wù)器安裝郵件服務(wù)器,這里從簡(jiǎn)化,本人服務(wù)器直接安裝的EwoMail服務(wù)器,具體可以參照官網(wǎng)標(biāo)準(zhǔn)文檔配置,只需幾行代碼便可安裝成功,另外需要在服務(wù)器上搭建Python環(huán)境,還是從簡(jiǎn)化,用最簡(jiǎn)單的配置方式,以下是代碼
這邊按照官網(wǎng)教程安裝好EwoMail服務(wù)器后,需要再次按照官網(wǎng)教程登陸web郵箱管理界面任意創(chuàng)建一個(gè)郵箱賬號(hào)密碼,在這之前,必須按照官網(wǎng)教程需要添加一個(gè)郵箱域名
接下來(lái)需要給服務(wù)器安裝Python環(huán)境
最新的EPEL 7倉(cāng)庫(kù)提供了Python3(python 3.6)的安裝源,如果你使用CentOS7或更新的版本的系統(tǒng)你也可以按照下面的步驟很輕松的從EPEL倉(cāng)庫(kù)安裝。
安裝最新版本的EPEL
用yum安裝python 3.6:
sudo yum install python36注意:上面的安裝方法并未安裝pip和setuptools,如果你要安裝這兩個(gè)庫(kù)可以使用下面的命令:
curl -O https://bootstrap.pypa.io/get-pip.py sudo /usr/bin/python3.6 get-pip.py云服務(wù)器搭建大功告成了,搭建一臺(tái)自己的郵件服務(wù)器只需要不到20行代碼
實(shí)現(xiàn)工作2:實(shí)現(xiàn)郵件推送業(yè)務(wù):
這里說(shuō)白了其實(shí)就是Python代碼實(shí)現(xiàn),簡(jiǎn)單邏輯就是用內(nèi)置smtplib模塊登陸自己搭建好的郵件服務(wù)器,然后requests請(qǐng)求實(shí)時(shí)更新的當(dāng)?shù)靥鞖?#xff0c;然后發(fā)給指定的郵箱,直接上代碼吧
#-*- coding: utf-8 -*- """ Created on Fri Apr 19 10:40:47 2019@author: YEXIAOLUN """ import smtplib from email.mime.text import MIMEText from email.header import Header import requests import json class SMTPS():def __init__(self):self.account='day_day_up_up@123456.com'self.password='root123456.'self.SMTP=smtplib.SMTP('123.45.678.9',25)#這里的服務(wù)器鏈接以及賬號(hào)密碼本人也做了替換,換成自己的云服務(wù)器ip和賬號(hào)密碼就行self.SMTP.login(self.account,self.password)def get_weather(self,city):url='https://www.tianqiapi.com/api?version=v6&appid=1234567&appsecret=7iaDovxG&city='+str(city)#這里的appid本人進(jìn)行了替換,這個(gè)只需要在天氣API中自己申請(qǐng)一個(gè)就行res=requests.get(url)jsons=json.loads(res.content)return jsonsdef send(self,mails):mail_msg = """<p>早上好 {0} 今天也要保持好心情?????</p><p><a href="#">這是我的郵箱 yexiaolun@foxmail.com</a></p><p>{1} 今日天氣:</p><p>更新時(shí)間:{2}</p><p>天氣情況:{3}</p><p>實(shí)時(shí)溫度:{4}</p><p>高溫:{5}</p><p>低溫:{6}</p><p>風(fēng)向:{7}</p><p>風(fēng)速:{8}</p><p>濕度:{9}</p><p>能見(jiàn)度:{10}</p><p>氣壓hPa:{11}</p><p>最低溫:{12}</p><p> 空氣質(zhì)量:{13}</p><p> 空氣質(zhì)量等級(jí):{14}</p><p> 空氣質(zhì)量描述:{15}</p>"""for m in mails.keys():jsons=self.get_weather(mails[m])send=[m]mail_msg=mail_msg.format(m.split('@')[0],mails[m],jsons['update_time'],'',jsons['tem'],jsons['tem1'],jsons['tem1'],jsons['win'],jsons['win_speed'],jsons['win_meter'],jsons['humidity'],jsons['visibility'],jsons['pressure'],jsons['air'],jsons['air_level'],jsons['air_tips'])subject = '早上好'message = MIMEText(mail_msg, 'html', 'utf-8')message['Subject'] = Header(subject, 'utf-8')self.SMTP.sendmail(self.account,send,message.as_string())if __name__ == '__main__':mails={'1977336966@qq.com':'上饒','n17189895796@163.com':'溫州','yexiaolun@foxmail.com':'杭州','854423358@qq.com':'杭州'}s=SMTPS()s.send(mails)能實(shí)現(xiàn)郵件推送想要實(shí)現(xiàn)郵件群發(fā)也不難,適當(dāng)修改代碼就行
實(shí)現(xiàn)工作3:部署代碼到服務(wù)器
這一部其實(shí)非常簡(jiǎn)單,就是復(fù)制下代碼到服務(wù)器,然后設(shè)個(gè)定時(shí)設(shè)置,每日8點(diǎn)執(zhí)行代碼,直接上代碼吧
1、復(fù)制代碼到服務(wù)器文件為mail.py,這里可以嘗試運(yùn)行一下:
#因?yàn)橹鞍惭b的是python3.6,所以用python3.6運(yùn)行 python3.6 mail.py2、這邊可能會(huì)運(yùn)行requests報(bào)錯(cuò),我們用鏡像源快速安裝一下就行
pip install -i https://pypi.tuna.tsinghua.edu.cn/simple requests3、安裝 crontabs服務(wù)并設(shè)置開(kāi)機(jī)自啟:
yum install crontabs systemctl enable crond systemctl start crond4、配置定時(shí)規(guī)則
crontab -e //編輯某個(gè)用戶的cron服務(wù)基本格式,
# For details see man 4 crontabs # Example of job definition: # .---------------- minute (0 - 59) # | .------------- hour (0 - 23) # | | .---------- day of month (1 - 31) # | | | .------- month (1 - 12) OR jan,feb,mar,apr ... # | | | | .---- day of week (0 - 6) (Sunday=0 or 7) OR sun,mon,tue,wed,thu,fri,sat # | | | | | # * * * * * user-name command to be executed 定時(shí)任務(wù)的每段為:分,時(shí),日,月,周,用戶,命令 第1列表示分鐘1~59 每分鐘用*或者 */1表示 第2列表示小時(shí)1~23(0表示0點(diǎn)) 第3列表示日期1~31 第4列表示月份1~12 第5列標(biāo)識(shí)號(hào)星期0~6(0表示星期天) 第6列要運(yùn)行的命令*:表示任意時(shí)間都,實(shí)際上就是“每”的意思。可以代表00-23小時(shí)或者00-12每月或者00-59分 -:表示區(qū)間,是一個(gè)范圍,00 17-19 * * * cmd,就是每天17,18,19點(diǎn)的整點(diǎn)執(zhí)行命令 ,:是分割時(shí)段,30 3,19,21 * * * cmd,就是每天凌晨3和晚上19,21點(diǎn)的半點(diǎn)時(shí)刻執(zhí)行命令 /n:表示分割,可以看成除法,*/5 * * * * cmd,每隔五分鐘執(zhí)行一次5、每日8點(diǎn)執(zhí)行代碼的代碼
00 08 * * * python3.6 /mail.py(附上我參考的資料鏈接)
https://www.cnblogs.com/cosiray/p/9946401.html(centos安裝python的三種方法)
https://www.cnblogs.com/p0st/p/9482167.html(centos定時(shí)任務(wù))
作者本人第一次寫(xiě)文章,很多技術(shù)細(xì)節(jié)可能不是那么詳細(xì),非常潦草,文章中更多的是在于實(shí)現(xiàn)的方法,更多技術(shù)的理解可以直接找我本人,我會(huì)非常熱情的解答你的問(wèn)題,謝謝觀看
總結(jié)
以上是生活随笔為你收集整理的从0搭建一个邮件服务器(用于邮件推送以及邮件群发业务)的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: JavaMail API详解
- 下一篇: Nexus3 安装 及 配置 docke