當前位置:首頁 » 編程軟體 » 發送郵件的腳本

發送郵件的腳本

發布時間: 2023-08-18 23:48:40

python批量發送郵件--包括批量不同附件

小豬在公司做出納,乾的活卻包括了出納、會計、結算專員等工作,周末都要被無奈在家加班,主要還沒有加班費,簡直是被公司嚴重壓榨。每個月初都要給每個工長發預付款賬單郵件,月中發結算款賬單。重復性機械工作。
一個及格線上的程序員,最起碼的覺悟就是將重復性的機械工作自動化,於是,在我花了一個多小時,幫她給一部分工長發了一次郵箱後,默默的回來寫了這個腳本
所以,設計要點就是一個字——
恩,就醬。

經過我觀察,郵件內容分為兩種,這里先說第一種,「結算款」:
(1) 郵件內容(content)不變,為固定的txt文本
(2) 附件(attch)為每個工長的結算賬單(excel文件.xlsx),此文件命名為總賬單中自動分割出來的名字(暫時不懂怎麼分割出來的=.=),格式為:

(3) 郵件主題(Subject)為附件名(不帶後綴名)
(4) 郵件接收對象(工長)的名單及其郵箱地址基本不變,偶爾變動
(5)

(1) 將工長及其郵箱地址存為CSV文件的兩列,python中將其讀取為字典形式,存儲以供後續查詢郵箱地址。

(2) 遍歷文件夾中的附件(.xlsx類型文件),對其進行兩種操作,一方面將其名字(不帶路徑和後綴)提取出來,作為郵件主題(Subject),並對Subject進一步劃分,得到其中的人名(工長);另一方面,將其傳入MIMEbase模塊中轉為郵件附件對象。

(3) 由上述得到的人名(name),在字典形式的通訊錄中,查找相應的地址(value),即為收件人名稱和地址
(4) 利用python中的email模塊和smtp模塊,登錄自己的郵箱賬號,再對每個附件,得到的收件人名和地址,添加附件,發送郵件。done

在設計過程中有幾點需要注意
(1) 有時一個郵件地址對應兩個人名,此時應該在CSV文件中分為兩行存儲,而不是將兩個人名存為同一個鍵;
(2)有賬單.xlsx文件,通訊錄里卻沒存儲此人記錄,程序應該列印提示沒有通訊記錄的人名,且不能直接退出,要保證員工看到此提示,此第一版程序還有解決此問題;
(3)此程序發送的郵件內容為純文本,若要求郵件內容有不同格式(如部分加粗,部分紅色),還有小部分需要每次更改的地方(如郵件內容包含當前月份),如何解決?(這就是第二種郵件內容,「預算款」);
(4)重名的,暫時還沒碰到,程序中也沒給出解決方案。

第一版到此,20180830,待更新
第二版更新,20180904

第三版更新,20180909

轉戰CSDN博客,更多博客見傳送門《 xiaozhou的博客主頁 》

Ⅱ 如何使用Windows Powershell腳本發送電子郵件

在運行任何腳本文件之前, 你都必須首先設置一個恰當的Execution Policy.
PowerShell腳本跟Windows CMD一樣, 和MS-DOS批處理一樣, 文件需要被保存為.ps1後綴名, 比如說myscript.ps1
最通常的運行腳本的方法是調用它:
PS C:\ & C:\Belfry\My first Script.ps1
注意: 這里的&操作符能允許你調用一個命令, 腳本, 或函數. 比如:
PS C:\ & C:\Program files\mycommand.exe
PS C:\ $runMyProg = C:\Program files\mycommand.exe
PS C:\ & $runMyProg
PS C:\ $myPing = Get-Command -commandType Application Ping
PS C:\ & $myPing
如果路徑不包含任何的空格, 那麼你就可以忽略引號和'&'操作符.
PS C:\ C:\Belfry\Myscript.ps1
如果腳本就在當前路徑下, 你必須使用符號.\來告訴PowerShell該腳本就在當前路徑下.
PS C:\ .\Myscript.ps1
Dot Sourcing
=====================
當使用上面的語法執行腳本的時候, 腳本中定義的變數和函數會在腳本運行結束後消失.

Ⅲ 要用shell腳本實現發郵件的需求,要發給多人,前台會把所有的郵件地址傳給我,我怎麼給所有地址發出去

如果你要向外部發郵件,通常需要配置你的sendmail或者使用更加強大的Postfix建立郵件伺服器,然後用郵件客戶端向外發送郵件。
而shell只是一個執行腳本,通過這個腳本可以實現自動發送的目的,但是解決不了你發郵件的需求。
如果有多個人,可以使用循環來寫。如果你對linux不懂的話,最好盡量少使用腳本。喜歡DU啪啦君,就採納一下吧!

Ⅳ 誰有群發郵件嘚腳本可以給本人使用嗎

郵件群發一直很好的營銷推廣方式,下面是一米軟體的智能QQ郵件營銷系統,你可以了解一下。

1、自動切換IP登錄多賬戶發送 保證第三方發件郵箱系統發送成功率

2、自定義html格式發送,自動轉碼敏感內容 有效提高郵件的送達率和進箱率

3、多模式發送支持 可根據需要選擇smtp或http協議發送

4、隨機發件人,多內容模板隨機發送 盡可能保證每次發送信息都不一樣

Ⅳ 怎樣讓電腦上的一個文本定時發送到郵件

1、配置腳本代碼:
首先在文本文件中輸入VBS腳本代寬純碼,然後將其另存為一個名為email.vbs的文件(文中只給出這個腳本文件的關鍵代碼,完整的代碼可在http://www.icpcw.com/bzsoft下載)。
Email.From = "發件人地址"
Email.To = "收件人地址"
Email.Subject = "郵件主題"
x="內容文件路徑"
y="附件文件路徑"
.Item(NameSpace&"smtpserver") = "郵箱伺服器"
.Item(NameSpace&"sensername") = "用戶名"
.Item(NameSpace&"sendpassword") = "密碼"
只需要將這八行關鍵代碼按照要求進行修改然後保存即可,可按以下步驟操作:首先輸入自己和對方的郵箱地址,並填好主題;接著新建一個文本文件(txt格式),輸入電子郵件的正文內容,在「內容文件路徑」和「附件文件路徑」分別填入文本內容文本文件和附件的路徑。由於現在國內的電子郵箱運營商,在發送電子郵件的時候都需要進行SMTP認證,即在發送電子郵件的時候,會對發件人的用戶名和密碼進行驗證,所以需要將「郵箱伺服器」、「搜消用戶名」和「密碼」分世巧知別輸入對應的信息就可以了(郵箱伺服器地址在網上可以查到,例如163郵箱的伺服器地址為:smtp.163.com,QQ郵箱則為smtp.qq.com)。
2、創建計劃任務
首先打開「計劃任務」窗口,點擊右側的「創建任務」命令。然後在彈出窗口「常規」標簽中的「名稱」選項中,輸入一個任意的名稱即可。接著在「安全選項」中選擇管理員賬戶,並勾選「使用最高許可權運行」選項即可。
3、然後選擇「觸發器」標簽並點擊「新建」按鈕,在彈出的窗口選擇「開始任務」列表中的「制定計劃時」選項。接下來選擇「設置」中的「每天」,並設置「開始」時間及間隔時間,並勾選「啟用」後點擊「確定」。然後選擇「操作」標簽並點擊「新建」按鈕,在彈出窗口的「操作」列表裡面選擇「啟動程序」選項。然後點擊「程序或腳本」選項後點擊「瀏覽」按鈕,選中剛才配置好的腳本文件。最後點擊「確定」保存退出,所需的計劃任務就創建好了。到了剛才設定的時間,電子郵件就會自動發送到對方郵箱中。

Ⅵ 在Python的Flask框架下收發電子郵件


這篇文章主要介紹了在Python的Flask框架下收發電子郵件的教程,主要用到了Flask中的Flask-mail工具,需要的朋友可以參考下
在大多數此類教程中都會不遺餘力的介紹如何使用資料庫。今天我們對資料庫暫且不表,而是來關注另一個在web應用中很重要的特性:如何推送郵件給用戶。
在某個輕量級應用中我們可能會添加一個如下的郵件服務功能:當用戶有了新的粉絲後,我們發送一封郵件通知用戶。有很多方法可以實現這個特性,而我們希望提供出一種可復用的通用框架來處理。
Flask-Mail介紹
對於我們來說是幸運的,現在已經有很多外部插件來處理郵件,雖說不能百分百按照我們的想法去處理,但已經相當接近了。
在虛擬環境中安裝 Flask-Mail是相當簡單的。Windows以外的用戶可以讓手利用以下命令來安裝:
?
1
flask/bin/pip install flask-mail
Windows用戶的安裝稍有不同,因為Flask-Mail所使用的一些模塊不能再Windows系統上運行,你可以使用以下命令:
?
1
flaskScriptspip install --no-deps lamson chardet flask-mail
配置:
回想汪指一下前文中單元測試部分的案例,我們通過添加配置支持了一個這樣的功能:當應用的某個版本測試出錯時可以郵件通知我們。從這個例子就可以看出如何配置使用郵件支持。
再次提醒大家,我們需要設置兩個方面的內容:
郵件伺服器信息
用戶郵箱地址
如下正是前文中所用到的配置
# email server
MAIL_SERVER =
MAIL_PORT = 25
MAIL_USE_TLS = False
MAIL_USE_SSL = False
MAIL_USERNAME = you
MAIL_PASSWORD = your-password
# administrator list
ADMINS = [[email protected]]
其中並沒有設置切實可用的郵件伺服器和郵箱。現在我們通過一個例子來看如何使用gmail郵箱賬戶來發送郵件:
# email server
MAIL_SERVER =
MAIL_PORT = 465
MAIL_USE_TLS = False
MAIL_USE_SSL = True
MAIL_USERNAME = your-gmail-username
MAIL_PASSWORD = your-gmail-password
# administrator list
ADMINS = [[email protected]]
另外我們也可以初始化一個Mail對象來連接SMTP郵件伺服器,發送郵件:
?
1
2
from flask.ext.mail import Mail
mail = Mail(app)
發個郵件試試!
為了了解flask-mail如何工作的,我們可以從命令行發一封郵件看看。進入python shell並執行如下的腳本:
?
7
from flask.ext.mail import Message
from app import mail
from config import ADMINS
msg = Message(test subject, sender = ADMINS[0], recipients = ADMINS)
msg.body = text body
msg.html = bHTML/b body
mail.send(msg)
上面這段代碼會根據inconfig.py中配置的郵箱地址列表,以首個郵箱作為發件人給所有郵箱發送一封郵件。郵件內容會以文本和html兩種格式呈現,而你能看到哪種格式取決於你的郵件客戶端。
多麼簡單小巧!你完全可以現在就把它集成到你的應用中。
郵件框架
我們現在可以編寫一個幫助函數來發送郵件。困滑配這是以上測試中一個通用版的測試。我們把這個函數放進一個新的原文件中用作郵件支持(fileapp/emails.py):
?
7
8
from flask.ext.mail import Message
from app import mail
def send_email(subject, sender, recipients, text_body, html_body):
msg = Message(subject, sender, recipients)
msg.body = text_body
msg.html = html_body
mail.send(msg)
Flask-Mail的郵件支持超出了我們目前的使用范圍,像密件抄送和附件的功能並不會在此應用中得以使用。
Follower 提醒
現在,我們已經有了發郵件的基本框架,我們可以寫發送follower提醒的函數了 (fileapp/emails.py):
11
from flask import render_template
from config import ADMINS
def follower_notification(followed, follower):
send_email([microblog] %s is now following you! % follower.nickname,
ADMINS[0],
[followed.email],
render_template(follower_email.txt,
user = followed, follower = follower),
render_template(follower_email.html,
user = followed, follower = follower))
你在這里找到任何驚喜了嗎?我們的老朋友render_template函數有一次出現了。
如果你還記得,我們使用這個函數在views渲染模版. 就像在views里寫html不好一樣,使用郵件模版是理想的選擇。我們要可能的將邏輯和表現分開,所以email模版也會和其它試圖模版一起放到在模版文件夾里.
所以,我們需要為follower提醒郵件寫純文本和網頁版的郵件模版,下面這個是純文本的版本 (fileapp/templates/follower_email.txt):
?
7
8
9
Dear {{user.nickname}},
{{follower.nickname}} is now a follower. Click on the following link to visit {{follower.nickname}}s profile page:
{{url_for(user, nickname = follower.nickname, _external = True)}}
Regards,
The microblog admin
下面這個是網頁版的郵件,效果會更好(fileapp/templates/follower_email.html):
11
12
13
pDear {{user.nickname}},/p
pa href={{url_for(user, nickname = follower.nickname, _external = True)}}{{follower.nickname}}/a is now a follower./p
table
tr valign=top
tdimg src={{follower.avatar(50)}}/td
td
a href={{url_for(user, nickname = follower.nickname, _external = True)}}{{follower.nickname}}/abr /
{{follower.about_me}}
/td
/tr
/table
pRegards,/p
pThe codemicroblog/code admin/p
註解:模版中的url_for函數的 _external = True 參數的意義.默認情況下,url_for 函數生成url是相對我們的域名的。例如,url_for(index)函數返回值是/index, 但是,發郵件是我們想要
最後一步是處理「follow」過程,即觸發郵件提醒時的視圖函數,(fileapp/views.py):
?
7
8
9
from emails import follower_notification
@app.route(/follow/nickname)
@login_required
def follow(nickname):
user = User.query.filter_by(nickname = nickname).first()
# ...
follower_notification(user, g.user)
return redirect(url_for(user, nickname = nickname))
現在你可以創建兩個用戶(如果還沒有用戶的話)嘗試著用讓一個用戶follow另一個用戶,理解郵件提醒是怎樣工作的。
就是這樣嗎?我們做完了嗎?
我們可能心底里很興奮完成了這項工作並且把郵件提醒功能同未完成列表裡刪除。
但是,如果你現在測試下應用,你會發現當你單擊follow鏈接的時候,頁面會2到3秒才會響應,瀏覽器才會刷新,這在之前是沒有的。
發生了什麼?
問題是,Flask-Mail 使用同步模式發送電子郵件。 從電子郵件發送開始,直到電子郵件交付後,給瀏覽器發回其響應,在整個過程中,Web伺服器會一直阻塞。如果我們試圖發送電子郵件到一個伺服器是緩慢的,甚至更糟糕的,暫時處於離線狀態,你能想像會發生什麼嗎?很不好。
這是一個可怕的限制,發送電子郵件應該是後台任務且不會干擾Web伺服器,讓我們看看我們如何能夠解決這個問題。
Python中執行非同步調用
我們想send_email 函數發完郵件後立即返回,需要讓發郵件移動到後台進程來非同步執行。
事實上python已經對非同步任務提供了支持,但實際上,還可以用其他的方式,比如線程和多進程模塊也可以實現非同步任務。
每當我們需要發郵件的時候,啟動一個線程來處理,比啟動一個全新的進程節省資源。所以,讓我們將mail.send(msg)調用放到另一個線程中。(fileapp/emails.py):
11
from threading import Thread
def send_async_email(msg):
mail.send(msg)
def send_email(subject, sender, recipients, text_body, html_body):
msg = Message(subject, sender = sender, recipients = recipients)
msg.body = text_body
msg.html = html_body
thr = threading.Thread(target = send_async_email, args = [msg])
thr.start()
如果你測試『follow『函數,現在你會發現瀏覽器在發送郵件之前會刷新。
所以,我們已經實現了非同步發送,但是,如果未來在別的需要非同步功能的地方難道我們還需要在實現一遍嗎?
過程都是一樣的,這樣就會在每一種情況下都有重復代碼,這樣非常不好。
我們可以通過 decorator改進代碼。使用裝飾器的代碼是這樣的:
11
from decorators import async
@async
def send_async_email(msg):
mail.send(msg)
def send_email(subject, sender, recipients, text_body, html_body):
msg = Message(subject, sender = sender, recipients = recipients)
msg.body = text_body
msg.html = html_body
send_async_email(msg)
更好了,對不對?
實現這種方式的代碼實際上很簡單,創建一個新源文件(fileapp/decorators.py):
?
7
from threading import Thread
def async(f):
def wrapper(*args, **kwargs):
thr = Thread(target = f, args = args, kwargs = kwargs)
thr.start()
return wrapper
現在我們對非同步任務創建了個有用的框架(framework), 我們可以說已經完成了!
僅僅作為一個練習,讓我們思考一下為什麼這個方法會看上去使用了進程而不是線程。我們並不想每當我們需要發送一封郵件時就有一個進程被啟動,所以我們能夠使用thePoolclass而不用themultiprocessingmole。這個類會創建指定數量的進程(這些都是主進程的子進程),並且這些子進程會通過theapply_asyncmethod送到進程池,等待接受任務去工作。這可能對於一個繁忙的網站會是一個有趣的途徑,但是我們目前仍將維持現在線程的方式。

熱點內容
整數是數存儲 發布:2025-02-04 11:39:44 瀏覽:694
12123六位密碼是多少 發布:2025-02-04 11:34:43 瀏覽:797
奧賽編程課 發布:2025-02-04 11:33:59 瀏覽:375
無法打開共享文件夾 發布:2025-02-04 11:29:50 瀏覽:635
電腦配置有哪些方面要求 發布:2025-02-04 11:27:38 瀏覽:525
安卓手機的米加大學什麼時候更新 發布:2025-02-04 11:26:39 瀏覽:705
長城哈弗f5潮版有哪些配置 發布:2025-02-04 11:24:22 瀏覽:540
編程兩階段 發布:2025-02-04 11:23:00 瀏覽:154
倒鉤編程 發布:2025-02-04 11:13:48 瀏覽:470
記事本如何加密 發布:2025-02-04 11:13:37 瀏覽:119