繁体   English   中英

通过python通过gmail发送电子邮件时出错

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM