使用Python连接到gmail帐户时没有任何反应

时间:2017-11-28 12:50:36

标签: python smtp gmail

我正试图在启动时从我的覆盆子pi发送电子邮件以获取其IP地址。我关注了这个博客:https://elinux.org/RPi_Email_IP_On_Boot_Debian

我的代码:

__author__ = 'author'
__license__ = "license"
__version__ = "1.0"
__maintainer__ = "maintainer"
__status__ = "Test"

import subprocess
import smtplib
from email.mime.text import MIMEText
import datetime

def connect_type(word_list):
    """ This function takes a list of words, then, depeding which key word, returns the corresponding
    internet connection type as a string. ie) 'ethernet'.
    """
    if 'wlan0' in word_list or 'wlan1' in word_list:
        con_type = 'wifi'
    elif 'eth0' in word_list:
        con_type = 'ethernet'
    else:
        con_type = 'current'

    return con_type

# Change to your own account information
# Account Information
to = 'toemail@gmx.com' # Email to send to.
gmail_user = 'myemail@gmail.com' # Email to send from. (MUST BE GMAIL)
gmail_password = 'mypwd' # Gmail password.

try:
    smtpserver = smtplib.SMTP('smtp.gmail.com',587) # Server to use.
    smtpserver.set_debuglevel(1)
    smtpserver.ehlo()  # Says 'hello' to the server
    smtpserver.starttls()  # Start TLS encryption
    smtpserver.ehlo()
    smtpserver.login(gmail_user, gmail_password)  # Log in to server
    today = datetime.date.today()  # Get current time/date

    arg='ip route list'  # Linux command to retrieve ip addresses.
    # Runs 'arg' in a 'hidden terminal'.
    p=subprocess.Popen(arg,shell=True,stdout=subprocess.PIPE)
    data = p.communicate()  # Get data from 'p terminal'.

    # Split IP text block into three, and divide the two containing IPs into words.
    ip_lines = data[0].splitlines()
    split_line_a = ip_lines[1].split()
    split_line_b = ip_lines[2].split()

    # con_type variables for the message text. ex) 'ethernet', 'wifi', etc.
    ip_type_a = connect_type(split_line_a)
    ip_type_b = connect_type(split_line_b)

    """Because the text 'src' is always followed by an ip address,
    we can use the 'index' function to find 'src' and add one to
    get the index position of our ip.
    """
    ipaddr_a = split_line_a[split_line_a.index('src')+1]
    ipaddr_b = split_line_b[split_line_b.index('src')+1]

    # Creates a sentence for each ip address.
    my_ip_a = 'Your %s ip is %s' % (ip_type_a, ipaddr_a)
    my_ip_b = 'Your %s ip is %s' % (ip_type_b, ipaddr_b)

    # Creates the text, subject, 'from', and 'to' of the message.
    msg = MIMEText(my_ip_a + "\n" + my_ip_b)
    msg['Subject'] = 'IPs For RaspberryPi on %s' % today.strftime('%b %d %Y')
    msg['From'] = gmail_user
    msg['To'] = to
    # Sends the message
    smtpserver.sendmail(gmail_user, [to], msg.as_string())
    # Closes the smtp server.
    smtpserver.quit()
except Exception as e:
    print ("[ERROR] failed to send mail: " + str(e))

执行程序时,不会发生异常。但是,程序尝试永远在线

连接到服务器
smtpserver = smtplib.SMTP('smtp.gmail.com',587)

没有任何反应。

我可以使用telnet访问smtp服务器和端口,没有任何问题。我还在Gmail帐户中启用了安全性较低的应用

有什么建议吗?

0 个答案:

没有答案