天天看點

postfix python發送郵件腳本配置(不亂碼)

一、環境說明

     我們通常需要發送郵件,用于報警,或郵件驗證等需求,本次的環境要求如下:

CentOS 6.x   最小化安裝,安裝postfix(一般系統安裝好自帶的郵件系統),如果沒有請如下操作:

#yum install postfix -y

python 2.6+  

二、postfix簡介

postfix是linux平台郵件系統,預設安裝,并且自動開機運作,無需過多的配置,但有一點需要說明,postfix所

在主機綁定了備案域名則預設不會當作垃圾郵件,而所在主機沒有綁定備案域名,大多郵件廠商會認為是垃圾郵件.

三、pytho發郵件腳本

#cat send_mail.py

import smtplib
from email.mime.multipart import MIMEMultipart
from email.mime.text import MIMEText

SERVER = 'localhost'
FROM = 'root@localhost'
PASSWORD = "Yourpasswd"
TO = ['[email protected],']    #添加收件人
SUBJECT = u'san Linx福利'
TEXT = u"""
    linux基礎
    連結:http://pan.baidu.com/s/1mhBDhnM
"""
msg = MIMEMultipart('alternative')
# 注意包含了非ASCII字元,需要使用unicode
msg['Subject'] = SUBJECT
msg['From'] = FROM
msg['To'] = ', '.join(TO)
part = MIMEText(TEXT, 'plain', 'utf-8')
msg.attach(part)
server = smtplib.SMTP(SERVER)
# server.login(FROM,PASSWORD)    # 使用外部郵件時的密碼,本地不需要
server.sendmail(FROM, TO, msg.as_string().encode('ascii'))
server.quit()      

#python send_mail.py

打開QQ郵箱如圖:

postfix python發送郵件腳本配置(不亂碼)

如上所述次實驗postfix所在主機沒有備案域名解析綁定,是以在QQ郵箱中是在垃圾箱中,而我的公司郵件沒有收到!網易過濾掉了!

另外以上是針對本地的postfix 預設smtp非SSL發送的,還可通過 對QQ如下的 加密碼認證發送郵件

有興趣的可以試下

smtp_server = "smtp.qq.com"
smtp_port = 465
server = smtplib.SMTP_SSL(smtp_server,smtp_port)
server.login(from_user,"tqnmomfayqpodjdh")
server.sendmail(from_user,to_list,mail.as_string())      

四、帶添加附件的腳本

#!/usr/bin/python
#coding:utf-8
import smtplib #負責登入smtp伺服器的
from email.mime.text import MIMEText #用來定義郵件的
from email import MIMEMultipart #定義發送郵件的根容器
from email import MIMEBase #定義附件
from email import Encoders #對附件進行編碼
msg= """
    linux基礎
    連結:http://pan.baidu.com/s/1mhBDhnM
"""
#接收人字元串
to_str = """
,
[email protected],
"""
###以上郵箱為了隐私寫的是假的 
#接收人清單
to_list = to_str.replace("\n","").split(",")
from_user = "root@localhost"#發送人
title = "san 的 Linux福利" #郵件的标題
#執行個體化一個郵件根容器
message = MIMEMultipart.MIMEMultipart()
#定義文本項
mail = MIMEText(msg,"plain","utf-8")
    #發送的内容    #内容的類型    #内容的編碼
message.attach(mail)
#附件的類型的變量
mintype,subtype = "application","octet-stream"
#定義附件的類型
file_message = MIMEBase.MIMEBase(mintype,subtype)
#附件添加内容
with open("by.txt","rb") as f:
    file_message.set_payload(f.read())
#對附件進行編碼
Encoders.encode_base64(file_message)
#附件的頭部定義
file_message.add_header(
    "Content-Disposition",
    "p_w_upload",
    filename = "by.txt"
)
message.attach(file_message)
message["Subject"] = title
message["From"] = from_user
message["To"] = to_str
#登入smtp伺服器    #qq smtp 伺服器地:localhost    #smtp 伺服器位址端口: 25
smtp_server = "localhost"
smtp_port = 25
#server = smtplib.SMTP_SSL(smtp_server,smtp_port)
server = smtplib.SMTP(smtp_server,smtp_port)
#server.login(from_user,"") #如果是smtp ssl 加密的需要使用者名密碼登入
server.sendmail(from_user,to_list,message.as_string())
    #發送人 #接收人清單  #發送的内容
server.quit()