9

我有yahoo帐户。是否有任何 python 代码可以从我的帐户发送电子邮件?

4

6 回答 6

16

是的 ; 这是代码:

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'
于 2013-05-05T04:55:02.303 回答
7

关于使用 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()
于 2013-10-15T23:21:42.247 回答
5

在此处访问雅虎帐户安全页面

您需要生成一个应用密码 - 这是屏幕底部的一个选项。在您的脚本中使用此页面上生成的密码 Yahoo。

于 2020-09-09T14:37:21.270 回答
3

支持非ASCII字符;你可以使用email

#!/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()
于 2013-05-05T06:43:06.453 回答
0

在一年半的时间里,我在 PC 和 Pi 上运行了以下 def。我有一个脚本每周六中午通过电子邮件发送给我,作为一般健康检查。工作部分是..

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()

其他人有这个问题吗?雅虎改变了什么?

于 2021-10-11T12:31:50.700 回答
0

有几个问题。一个已通过已发布的答案解决。

  1. 使用 TLS(端口 465)
  2. 确保您有应用程序密码。雅虎和其他电子邮件服务已更新其身份验证做法,以限制无需 2 因素身份验证即可登录的内容。如果您想使用 smtplib 进行身份验证,您需要在此处创建应用密码:https ://login.yahoo.com/myaccount/security/app-password

如果你这样做,那么你将能够发送电子邮件

于 2021-07-02T12:30:14.457 回答