1. 程式人生 > >Python 使用smtp傳送郵件失敗 在Windows Server R2012上傳送失敗的問題

Python 使用smtp傳送郵件失敗 在Windows Server R2012上傳送失敗的問題

我使用Python編寫了一段使用stmp傳送郵件的例子,在本機上傳送能成功,但是在我的Windows Server R2012伺服器上一直髮送失敗,一直卡在連線SMTP伺服器那一步,經過一番折騰,終於可以了。接下來給出傳送失敗和傳送成功的程式碼。

一、失敗程式碼


# -*- coding: UTF-8 -*-
import smtplib
import email.mime.multipart
import email.mime.text

# 郵箱配置
my_email_config = {'host': 'smtp.163.com',              # 設定伺服器,可換成其他伺服器
'sender': '[email protected]', # 發件人 'password': 'auth_path', # 163郵箱的客戶端授權密碼,不是郵箱密碼,怎麼設定可自行百度 'receiver': '[email protected]', # 收件人 } def send_email(mail_subject, mail_content): """ 傳送郵件 :param mail_subject 郵件主題 :param mail_content: 郵件內容 :return: 空 """
# 第三方 SMTP 服務,推薦163 host = my_email_config['host'] # 設定伺服器 sender = my_email_config['sender'] # 使用者名稱 password = my_email_config['password'] # 口令 receiver = my_email_config['receiver'] # 接收郵件,可設定為你的QQ郵箱或者其他郵箱 msg = email.mime.multipart.MIMEMultipart() ''' 郵件主題為‘test’的時候就會出現錯誤,換成其他詞就好了。。我也不知道這是什麼奇葩的原因
''' msg['Subject'] = mail_subject msg['From'] = sender msg['To'] = receiver txt = email.mime.text.MIMEText(mail_content) msg.attach(txt) smtp_server = smtplib.SMTP_SSL() smtp_server.connect(host, 25) # 登入 smtp_server.login(sender, password) # 傳送郵件 smtp_server.sendmail(sender, receiver, msg.as_string()) # 退出 smtp_server.quit() print('郵件傳送成功,主題:%s' % mail_subject) if __name__ == "__main__": subject = "想你了" content = ''' 你好,小明 ''' send_email(subject, content)  

二、成功程式碼


# -*- coding: UTF-8 -*-
import smtplib
import email.mime.multipart
import email.mime.text

# 這裡需要匯入自己的資訊
try:
    # from config import my_email_config
from config_backup import my_email_config
except ImportError:
    # from .config import my_email_config
from .config_backup import my_email_config
# 郵箱配置
my_email_config = {'host': 'smtp.163.com',              # 設定伺服器,可換成其他伺服器
'sender': '[email protected]',       # 發件人
'password': 'auth_path',             # 163郵箱的客戶端授權密碼,不是郵箱密碼,怎麼設定可自行百度
'receiver': '[email protected]',       # 收件人
}

def send_email(mail_subject, mail_content):
    """
    傳送郵件
:param mail_subject 郵件主題
:param mail_content: 郵件內容
:return: 空
    """
# 第三方 SMTP 服務,推薦163
host = my_email_config['host']  # 設定伺服器
sender = my_email_config['sender']  # 使用者名稱
password = my_email_config['password']  # 口令
receiver = my_email_config['receiver']  # 接收郵件,可設定為你的QQ郵箱或者其他郵箱
msg = email.mime.multipart.MIMEMultipart()

    '''
    郵件主題為‘test’的時候就會出現錯誤,換成其他詞就好了。。我也不知道這是什麼奇葩的原因 
    '''
msg['Subject'] = mail_subject
    msg['From'] = sender
    msg['To'] = receiver

    txt = email.mime.text.MIMEText(mail_content)
    msg.attach(txt)

    # 這裡要使用SSL,這樣就能在Windows Server R2012上傳送郵件了
smtp_server = smtplib.SMTP_SSL()
    smtp_server.connect(host, 465)
    # 登入
smtp_server.login(sender, password)
    # 傳送郵件
smtp_server.sendmail(sender, receiver, msg.as_string())
    # 退出
smtp_server.quit()
    print('郵件傳送成功,主題:%s' % mail_subject)


if __name__ == "__main__":
    subject = "想你了"
content = '''
           你好,小明
       '''
send_email(subject, content)