首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >使用SMTP从Python发送邮件

使用SMTP从Python发送邮件
EN

Stack Overflow用户
提问于 2008-09-15 16:36:36
回答 13查看 263.4K关注 0票数 130

我使用以下方法通过SMTP从Python发送邮件。这是正确的方法吗?还是有我遗漏的地方?

代码语言:javascript
复制
from smtplib import SMTP
import datetime

debuglevel = 0

smtp = SMTP()
smtp.set_debuglevel(debuglevel)
smtp.connect('YOUR.MAIL.SERVER', 26)
smtp.login('USERNAME@DOMAIN', 'PASSWORD')

from_addr = "John Doe <john@doe.net>"
to_addr = "foo@bar.com"

subj = "hello"
date = datetime.datetime.now().strftime( "%d/%m/%Y %H:%M" )

message_text = "Hello\nThis is a mail from your server\n\nBye\n"

msg = "From: %s\nTo: %s\nSubject: %s\nDate: %s\n\n%s" 
        % ( from_addr, to_addr, subj, date, message_text )

smtp.sendmail(from_addr, to_addr, msg)
smtp.quit()
EN

回答 13

Stack Overflow用户

回答已采纳

发布于 2008-09-15 17:24:40

我使用的脚本非常类似;我将其发布在这里作为如何使用email.*模块生成MIME消息的示例;因此可以很容易地修改此脚本以附加图片等。

我依靠ISP来添加date time报头。

我的ISP要求我使用安全的smtp连接来发送邮件,我依靠smtplib模块(可从http://www1.cs.columbia.edu/~db2501/ssmtplib.py下载)。

与您的脚本一样,用于在SMTP服务器上进行身份验证的用户名和密码(在下面给出了虚拟值)在源文件中是纯文本的。这是一个安全弱点;但最好的替代方案取决于您需要多小心(想要吗?)是为了保护这些。

=======================================

代码语言:javascript
复制
#! /usr/local/bin/python


SMTPserver = 'smtp.att.yahoo.com'
sender =     'me@my_email_domain.net'
destination = ['recipient@her_email_domain.com']

USERNAME = "USER_NAME_FOR_INTERNET_SERVICE_PROVIDER"
PASSWORD = "PASSWORD_INTERNET_SERVICE_PROVIDER"

# typical values for text_subtype are plain, html, xml
text_subtype = 'plain'


content="""\
Test message
"""

subject="Sent from Python"

import sys
import os
import re

from smtplib import SMTP_SSL as SMTP       # this invokes the secure SMTP protocol (port 465, uses SSL)
# from smtplib import SMTP                  # use this for standard SMTP protocol   (port 25, no encryption)

# old version
# from email.MIMEText import MIMEText
from email.mime.text import MIMEText

try:
    msg = MIMEText(content, text_subtype)
    msg['Subject']=       subject
    msg['From']   = sender # some SMTP servers will do this automatically, not all

    conn = SMTP(SMTPserver)
    conn.set_debuglevel(False)
    conn.login(USERNAME, PASSWORD)
    try:
        conn.sendmail(sender, destination, msg.as_string())
    finally:
        conn.quit()

except:
    sys.exit( "mail failed; %s" % "CUSTOM_ERROR" ) # give an error message
票数 123
EN

Stack Overflow用户

发布于 2013-07-11 22:59:54

I通常use...not的方法有很大不同,但有一点不同

代码语言:javascript
复制
import smtplib
from email.MIMEMultipart import MIMEMultipart
from email.MIMEText import MIMEText

msg = MIMEMultipart()
msg['From'] = 'me@gmail.com'
msg['To'] = 'you@gmail.com'
msg['Subject'] = 'simple email in python'
message = 'here is the email'
msg.attach(MIMEText(message))

mailserver = smtplib.SMTP('smtp.gmail.com',587)
# identify ourselves to smtp gmail client
mailserver.ehlo()
# secure our email with tls encryption
mailserver.starttls()
# re-identify ourselves as an encrypted connection
mailserver.ehlo()
mailserver.login('me@gmail.com', 'mypassword')

mailserver.sendmail('me@gmail.com','you@gmail.com',msg.as_string())

mailserver.quit()

就这样

票数 93
EN

Stack Overflow用户

发布于 2008-11-08 20:12:27

另外,如果你想使用TLS进行smtp auth,而不是SSL,那么你只需要改变端口(使用587)并执行smtp.starttls()。这对我很有效:

代码语言:javascript
复制
...
smtp.connect('YOUR.MAIL.SERVER', 587)
smtp.ehlo()
smtp.starttls()
smtp.ehlo()
smtp.login('USERNAME@DOMAIN', 'PASSWORD')
...
票数 23
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/64505

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档