我使用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)