[英]Error sending an email through gmail via python
你好!
我正在尝试用Python编写一个程序,该程序将接收电子邮件地址和命令行参数中的某些短语,并且该程序会将短语(带有一些背景信息)发送到所提供的电子邮件地址。
该代码如下:
#Mail Module
try:
import smtplib
import sys
from email.mime.text import MIMEText
except ImportError:
print "Error importing necessary modules into the project, Please contact MagshiProject staff"
else:
def sendAnEmail():
try:
sender = "magshiproject@gmail.com"
recipient = str(sys.argv[1])
password = str(sys.argv[2])
message = MIMEText("""From: From Magshimim Project <magshiproject@gmail.com>
To: To User <'{0}'>
Subject: Your password to further use MagshiProject Program
Your password is: '{1}'
Please copy and paste it from here to the window requesting this password in order to proceed.
This password will not be useful in 24 hours.""".format(recipient, password))
message['Subject'] = "Your password to use MagshiProject"
message['From'] = sender
message['To'] = recipient
s = smtplib.SMTP("smtp.google.com", 587)
s.ehlo()
s.starttls()
s.ehlo()
s.login("Username", "Password")
s.sendmail(me, [you], msg.as_string())
s.quit()
print "Message has been sent successfully."
except Exception as e:
print "Something went wrong, Please try again later."
print "Error Message: '{0}'.".format(str(e))
print "Error type: '{0}'.".format(str(type(e)))
sendAnEmail()
错误如下:
Something went wrong, Please try again later.
Error message: '[Errno 11001] getaddrinfo failed'.
Error type: '<class 'socket.gaierror'>'.
我该怎么办才能解决这个问题?
预先感谢您,Iliya
您的代码中存在一些问题,似乎表明这有点像复制/粘贴工作,但希望我们可以通过这一过程为您提供帮助。
服务器地址
您会注意到,您已使用以下代码连接到SMTP服务器
s = smtplib.SMTP("smtp.google.com", 587)
但是,通过Google快速搜索“ Gmail SMTP”,我们可以看到Gmail的所有SMTP设置 ,包括地址: "smtp.gmail.com"
。 所以我们将其更改为
s = smtplib.SMTP("smtp.gmail.com", 587)
错误/缺少变量
此外,还有另一个小错误
s.sendmail(me, [you], msg.as_string())
显然, me
和[you]
未定义,因此根据您的其他变量, me
应该是电子邮件的sender
,而[you]
应该是recipient
,因此我们将用您现有的变量替换这些值。 您也没有变量msg
,因此在这种情况下,它可能应该是message.as_string()
。
另外,我们与s.login("Username","Password")
一起使用的s.login("Username","Password")
可能是发送电子邮件的同一个人,因此我们将其替换为sender
。
所以这是正确形式的代码
#Mail Module
try:
import smtplib
import sys
from email.mime.text import MIMEText
except ImportError:
print "Error importing necessary modules into the project, Please contact MagshiProject staff"
else:
def sendAnEmail():
try:
sender = "magshiproject@gmail.com"
recipient = str(sys.argv[1])
password = str(sys.argv[2])
message = MIMEText("""From: From Magshimim Project <magshiproject@gmail.com>
To: To User <'{0}'>
Subject: Your password to further use MagshiProject Program
Your password is: '{1}'
Please copy and paste it from here to the window requesting this password in order to proceed.
This password will not be useful in 24 hours.""".format(recipient, password))
message['Subject'] = "Your password to use MagshiProject"
message['From'] = sender
message['To'] = recipient
s = smtplib.SMTP("smtp.gmail.com", 587)
s.ehlo()
s.starttls()
s.ehlo()
s.login(sender, "Password")
s.sendmail(sender, recipient, message.as_string())
s.quit()
print "Message has been sent successfully."
except Exception as e:
print "Something went wrong, Please try again later."
print "Error Message: '{0}'.".format(str(e))
print "Error type: '{0}'.".format(str(type(e)))
sendAnEmail()
假设您将"Username"
和"Password"
替换为实际值,并使用如下参数调用程序(假设文件名为sendmail.py
),则此方法有效
python sendmail.py "someone@somewhere.com" "password"
编辑:获取sender
密码
为了使此脚本更加完善,可以使用getpass
模块提示输入sender
密码。 添加以下导入
import getpass
再改"Password"
在s.login(sender, "Password")
以
s.login(sender,getpass.getpass("Please enter your password for %s: " % sender))
然后系统会提示您输入sender
的gmail密码
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.