VBS腳本發送郵件,郵件標題亂碼的解決方法

以下是2個發送郵件的VBS腳本,且解決了郵件主題亂碼的問題。

之前應準備郵箱並開啓SMTP服務,本例是用139郵箱發送郵件,其它郵箱請自行嘗試。

發件郵箱:[email protected]

SMTP:SMTP.139.COM

郵箱密碼:123456789

腳本1:

NameSpace = "http://schemas.microsoft.com/cdo/configuration/" ' 這個必須有,應該是VBS腳本鏈接微軟網站獲取某些支持應用的,刪除的話vbs腳本會報錯! 
Set Email = CreateObject("CDO.Message")  ' 調用vbs郵件接口 
Email.From = "[email protected]"   ' 發信人地址 
Email.to = "[email protected]"    ' 收信人地址 
Email.Subject = "=?UTF-8?B?6LSi5Yqh56eR55m75b2V77ya?="+cstr(now())+cstr(now())  ' 本行的含義見下文 
Email.Textbody = "郵件正文"
'Email.AddAttachment "d:\1.txt" ' 如果有附件就在這裏指明,本例註釋掉了 
With Email.Configuration.Fields
.Item(NameSpace&"sendusing")= 2
.Item(NameSpace&"smtpserver")= "smtp.139.com"      ' 發信服務器,也可以寫IP地址 
.Item(NameSpace&"smtpserverport")= 25              ' SMTP端口 
.Item(NameSpace&"smtpauthenticate")= 1
.Item(NameSpace&"sendusername")= "abc"        ' 用戶名    
.Item(NameSpace&"sendpassword")= "123456789"  ' 郵箱密碼 
.update
End With
Email.Send
Set Emaill=Nothing

以上腳本“Email.Subject = "=?UTF-8?B?6LSi5Yqh56eR55m75b2V77ya?="+cstr(now())+cstr(now())”一行的含義:

Email.Subject是郵件標題,默認以BASE64編碼發送,所以如果直接寫中文,例如Email.Subject = "中文",郵件標題肯定是亂碼,解決方法有2個:

① 去網站:https://www.sendblaster.com/utf8-email-subject-encoder/ 把中文標題直接轉爲BASE64編碼填入腳本(也可搜索關鍵字:Utf8 Email Subject Encoder),郵件標題就顯示爲中文了,上例是把“財務科登錄:“編碼爲BASE64,後跟郵件發送時間。

② 在網上找在線BASE64編碼器,比如https://tool.oschina.net/ 進入”BASE64編碼解碼“,填入漢字將其編碼爲BASE64,在輸出的字符串前面添加 =?UTF-8?B? 在後面添加 ?=

例如:”人事科登錄:“編碼爲BASE64的輸出是:5Lq65LqL56eR55m75b2V

那麼郵件標題的取值就是:=?UTF-8?B?5Lq65LqL56eR55m75b2V?=

另一個技巧:Email.Subject = "=?UTF-8?B?6LSi5Yqh56eR55m75b2V77ya?="+"abc"+cstr(now())+cstr(now())

中間可以用加號連接字符串,或者UTF-8字符。

腳本2:

'Create the objects require for sending email using CDO
Set objMail = CreateObject("CDO.Message")
Set objConf = CreateObject("CDO.Configuration")
Set objFlds = objConf.Fields
' 設置CDO object的各種參數和屬性 
objFlds.Item("http://schemas.microsoft.com/cdo/configuration/sendusing") = 2 'cdoSendUsingPort
' 此處寫入你的SMTP服務器的域名或者IP,例如smtp.163.com: 
objFlds.Item("http://schemas.microsoft.com/cdo/configuration/smtpserver") = "smtp.139.com" 
' 此處寫SMTP服務器端口號: 
objFlds.Item("http://schemas.microsoft.com/cdo/configuration/smtpserverport") = 25
' 如果SMTP不需要授權,就把以下3行都註釋掉,但目前大多數SMTP服務器都需要授權,所以不用動,填入郵箱的用戶名和密碼: 
objFlds.Item("http://schemas.microsoft.com/cdo/configuration/sendusername") = "abc"
objFlds.Item("http://schemas.microsoft.com/cdo/configuration/sendpassword") = "123456789"
objFlds.Item("http://schemas.microsoft.com/cdo/configuration/smtpauthenticate") = 1 'cdoBasic
objFlds.Update
objMail.Configuration = objConf
objMail.From = "[email protected]" ' 發件郵箱 
objMail.To = "[email protected]"    ' 收件郵箱 
objMail.Subject = "=?UTF-8?B?6LSi5Yqh56eR55m75b2V77ya?="+cstr(now())+cstr(now())
objMail.TextBody = "郵件正文"
objMail.Send
Set objFlds = Nothing
Set objConf = Nothing
Set objMail = Nothing




發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章