【发布时间】:2013-04-29 04:36:36
【问题描述】:
我有yahoo 帐户。
是否有任何 python 代码可以从我的帐户发送电子邮件?
【问题讨论】:
我有yahoo 帐户。
是否有任何 python 代码可以从我的帐户发送电子邮件?
【问题讨论】:
是的;这是代码:
import smtplib
fromMy = 'yourMail@yahoo.com' # fun-fact: from is a keyword in python, you can't use it as variable, did abyone check if this code even works?
to = 'SomeOne@Example.com'
subj='TheSubject'
date='2/1/2010'
message_text='Hello Or any thing you want to send'
msg = "From: %s\nTo: %s\nSubject: %s\nDate: %s\n\n%s" % ( fromMy, to, subj, date, message_text )
username = str('yourMail@yahoo.com')
password = str('yourPassWord')
try :
server = smtplib.SMTP("smtp.mail.yahoo.com",587)
server.login(username,password)
server.sendmail(fromMy, to,msg)
server.quit()
print 'ok the email has sent '
except :
print 'can\'t send the Email'
【讨论】:
SMTP AUTH extension not supported by server.
关于使用 yahoo 的 smtp 服务器,我绞尽脑汁(简短地)。 465 是行不通的。我决定通过端口 587 进行 TLS 路由,我能够进行身份验证和发送电子邮件。
import smtplib
from email.mime.text import MIMEText
SMTP_SERVER = "smtp.mail.yahoo.com"
SMTP_PORT = 587
SMTP_USERNAME = "username"
SMTP_PASSWORD = "password"
EMAIL_FROM = "fromaddress@yahoo.com"
EMAIL_TO = "toaddress@gmail.com"
EMAIL_SUBJECT = "REMINDER:"
co_msg = """
Hello, [username]! Just wanted to send a friendly appointment
reminder for your appointment:
[Company]
Where: [companyAddress]
Time: [appointmentTime]
Company URL: [companyUrl]
Change appointment?? Add Service??
change notification preference (text msg/email)
"""
def send_email():
msg = MIMEText(co_msg)
msg['Subject'] = EMAIL_SUBJECT + "Company - Service at appointmentTime"
msg['From'] = EMAIL_FROM
msg['To'] = EMAIL_TO
debuglevel = True
mail = smtplib.SMTP(SMTP_SERVER, SMTP_PORT)
mail.set_debuglevel(debuglevel)
mail.starttls()
mail.login(SMTP_USERNAME, SMTP_PASSWORD)
mail.sendmail(EMAIL_FROM, EMAIL_TO, msg.as_string())
mail.quit()
if __name__=='__main__':
send_email()
【讨论】:
smtplib.SMTPServerDisconnected: Connection unexpectedly closed 但我已经通过转到我的雅虎“帐户安全”设置并选中“允许使用不太安全登录的应用”选项来解决它
访问雅虎账号安全页面here
您需要生成一个应用密码 - 这是屏幕底部的一个选项。在脚本中使用 Yahoo 在此页面上生成的密码。
【讨论】:
支持非ASCII字符;你可以使用email package:
#!/usr/bin/env python
# -*- coding: utf-8 -*-
from email.header import Header
from email.mime.text import MIMEText
from getpass import getpass
from smtplib import SMTP_SSL
# provide credentials
login = 'you@yahoo.com'
password = getpass('Password for "%s": ' % login)
# create message
msg = MIMEText('message body…', 'plain', 'utf-8')
msg['Subject'] = Header('subject…', 'utf-8')
msg['From'] = login
msg['To'] = ', '.join([login, ])
# send it
s = SMTP_SSL('smtp.mail.yahoo.com', timeout=10) #NOTE: no server cert. check
s.set_debuglevel(0)
try:
s.login(login, password)
s.sendmail(msg['From'], msg['To'], msg.as_string())
finally:
s.quit()
【讨论】:
有几个问题。一个已通过已发布的答案解决。
如果你这样做了,那么你就可以发送电子邮件了
【讨论】:
一年半以来,我的以下 def 在 PC 和 Pi 上运行良好。我有一个脚本每周六中午通过电子邮件发送给我,作为一般健康检查。工作部分是..
def my_callback():
server = smtplib.SMTP('smtp.mail.yahoo.com:587')
server.starttls()
server.login(username,password)
server.sendmail(fromaddr, toaddrs, message)
server.quit()
大约两周前,它停止在我的所有设备上运行。运行脚本我发现“server.starttls()”行是失败的根源。环顾四周,我发现恢复到端口 465 和 SSL,删除 server.starttls() 解决了这个问题。
def my_callback():
server = smtplib.SMTP_SSL('smtp.mail.yahoo.com', 465)
server.login(username,password)
server.sendmail(fromaddr, toaddrs, message)
server.quit()
其他人有这个问题吗?雅虎改变了什么?
【讨论】: