简体   繁体   中英

How Do I Send Emails Using Python 3.4 With GMail?

I've been trying bits of code such as:

import smtplib

def sendemail(from_addr, to_addr_list, cc_addr_list,
              subject, message,
              login, password,
              smtpserver='smtp.gmail.com:587'):
    header  = 'From: %s\n' % from_addr
    header += 'To: %s\n' % ','.join(to_addr_list)
    header += 'Cc: %s\n' % ','.join(cc_addr_list)
    header += 'Subject: %s\n\n' % subject
    message = header + message

    server = smtplib.SMTP(smtpserver)
    server.starttls()
    server.login(login,password)
    problems = server.sendmail(from_addr, to_addr_list, message)
    server.quit()

sendemail(from_addr    = 'python@RC.net', 
        to_addr_list = ['example@gmail.com'],
        cc_addr_list = ['example@gmail.com'], 
        subject      = 'Howdy', 
        message      = 'Hello!', 
        login        = 'example@gmail.com', 
        password     = 'XXXX')

Except with an actual password and details.

It brings this error:

Traceback (most recent call last):
  File "User/Python/Email.py", line 27, in <module>
    password     = 'lollol69')
  File "User/Python/Email.py", line 15, in sendemail
    server = smtplib.SMTP(smtpserver)
  File "C:\Python34\lib\smtplib.py", line 242, in __init__
    (code, msg) = self.connect(host, port)
  File "C:\Python34\lib\smtplib.py", line 321, in connect
    self.sock = self._get_socket(host, port, self.timeout)
  File "C:\Python34\lib\smtplib.py", line 292, in _get_socket
    self.source_address)
  File "C:\Python34\lib\socket.py", line 509, in create_connection
    raise err
  File "C:\Python34\lib\socket.py", line 500, in create_connection
    sock.connect(sa)
TimeoutError: [WinError 10060] A connection attempt failed because the connected party did not properly respond after a period of time, or established connection failed because connected host has failed to respond

Ideally, I could know what's wrong with the code and how I can fix this. If it's totally wrong then some working code with Gmail would be greatly appreciated.

Thanks!

You have to split the smpt server address and the port and use them as separate parameters for smtplib.SMTP('smtp.gmail.com', 587) See https://docs.python.org/3.4/library/smtplib.html :


import smtplib

def sendemail(from_addr, to_addr_list, cc_addr_list,
              subject, message,
              login, password,
              smtpserver='smtp.gmail.com', smtpport=587):  # split smtpserver and -port
    header  = 'From: %s\n' % from_addr
    header += 'To: %s\n' % ','.join(to_addr_list)
    header += 'Cc: %s\n' % ','.join(cc_addr_list)
    header += 'Subject: %s\n\n' % subject
    message = header + message

    server = smtplib.SMTP(smtpserver, smtpport)  # use both smtpserver  and -port 
    server.starttls()
    server.login(login,password)
    problems = server.sendmail(from_addr, to_addr_list, message)
    server.quit()

sendemail(from_addr    = 'python@RC.net', 
        to_addr_list = ['example@gmail.com'],
        cc_addr_list = ['example@gmail.com'], 
        subject      = 'Howdy', 
        message      = 'Hello!', 
        login        = 'example@gmail.com', 
        password     = 'XXXX')

By the way: change your gmail password as it was posted in the stacktrace

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

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