通过 Python 和 Google SMTP 服务器发送电子邮件
Sending email via Python and Google SMTP server
我的邮箱是:sarahconnor@gmail.com
我想从 johnconnor@skynet.com
发送一封电子邮件给我。
我不想远程登录到我的 gmail 帐户来发送电子邮件。
这是我需要的:
我是 Sarah Connor,我想在我的邮箱 ( sarahconnor@gmail.com
) 中收到一封来自 johnconnor@skynet.com
...
的电子邮件
所以我使用这个脚本来做到这一点:
import requests
import smtplib
from email.mime.image import MIMEImage
from email.mime.multipart import MIMEMultipart
COMMASPACE = ', '
msg = MIMEMultipart()
msg['Subject'] = 'Our family reunion'
fromm = "johnconnor@skynet.com"
to = "sarahconnor@gmail.com"
msg['From'] = fromm
msg['To'] = COMMASPACE.join(to)
msg.preamble = 'Our family reunion'
requests.get("http://smtp.gmail.com", verify=False)
s = smtplib.SMTP_SSL("smtp.gmail.com", 587)
s.starttls()
s.login('sarahconnor@gmail.com', 'mypassword12345') #here I login to the SMTP server from Google to be able to send emails...
s.sendmail(fromm, to, msg.as_string())
s.close()
我有以下错误:
raise ConnectionError(err, request=request)
requests.exceptions.ConnectionError: ('Connection aborted.', error(10054, 'An existing connection was forcibly closed by the remote host'))
从 here 看来,我似乎没有遇到任何问题。
有谁知道我该如何解决这个问题?
谢谢
这会将一封邮件从一个gmail帐户发送到任何其他帐户
import smtplib
from email.mime.text import MIMEText
class GmailHandler():
"""
IMPORTANT NOTE:
in order to access a gmail account with this handler,
your account needs 'foreign-access' enabled (follow these steps):
login to the account
go here--> https://accounts.google.com/b/0/DisplayUnlockCaptcha
press 'Continue'
Done.
"""
def __init__(self, gmail, password):
self.gmail = gmail
self.password = password
def send_mail(self, receivers, subject, text):
if not isinstance(receivers, list):
receivers = [receivers]
# Send the message via our own SMTP server, but don't include the envelope header
smtp = smtplib.SMTP("smtp.gmail.com", 587)
smtp.ehlo()
smtp.starttls()
smtp.ehlo()
smtp.login(self.gmail, self.password)
for receiver in receivers:
msg = MIMEText(text)
msg['Subject'] = subject
msg['From'] = self.gmail
msg['To'] = receiver
smtp.sendmail(self.gmail, receiver, str(msg))
smtp.quit()
使用 smtplib.SMTP
代替 smtplib.SMTP_SSL
。
我的邮箱是:sarahconnor@gmail.com
我想从 johnconnor@skynet.com
发送一封电子邮件给我。
我不想远程登录到我的 gmail 帐户来发送电子邮件。
这是我需要的:
我是 Sarah Connor,我想在我的邮箱 ( sarahconnor@gmail.com
) 中收到一封来自 johnconnor@skynet.com
...
所以我使用这个脚本来做到这一点:
import requests
import smtplib
from email.mime.image import MIMEImage
from email.mime.multipart import MIMEMultipart
COMMASPACE = ', '
msg = MIMEMultipart()
msg['Subject'] = 'Our family reunion'
fromm = "johnconnor@skynet.com"
to = "sarahconnor@gmail.com"
msg['From'] = fromm
msg['To'] = COMMASPACE.join(to)
msg.preamble = 'Our family reunion'
requests.get("http://smtp.gmail.com", verify=False)
s = smtplib.SMTP_SSL("smtp.gmail.com", 587)
s.starttls()
s.login('sarahconnor@gmail.com', 'mypassword12345') #here I login to the SMTP server from Google to be able to send emails...
s.sendmail(fromm, to, msg.as_string())
s.close()
我有以下错误:
raise ConnectionError(err, request=request)
requests.exceptions.ConnectionError: ('Connection aborted.', error(10054, 'An existing connection was forcibly closed by the remote host'))
从 here 看来,我似乎没有遇到任何问题。
有谁知道我该如何解决这个问题?
谢谢
这会将一封邮件从一个gmail帐户发送到任何其他帐户
import smtplib
from email.mime.text import MIMEText
class GmailHandler():
"""
IMPORTANT NOTE:
in order to access a gmail account with this handler,
your account needs 'foreign-access' enabled (follow these steps):
login to the account
go here--> https://accounts.google.com/b/0/DisplayUnlockCaptcha
press 'Continue'
Done.
"""
def __init__(self, gmail, password):
self.gmail = gmail
self.password = password
def send_mail(self, receivers, subject, text):
if not isinstance(receivers, list):
receivers = [receivers]
# Send the message via our own SMTP server, but don't include the envelope header
smtp = smtplib.SMTP("smtp.gmail.com", 587)
smtp.ehlo()
smtp.starttls()
smtp.ehlo()
smtp.login(self.gmail, self.password)
for receiver in receivers:
msg = MIMEText(text)
msg['Subject'] = subject
msg['From'] = self.gmail
msg['To'] = receiver
smtp.sendmail(self.gmail, receiver, str(msg))
smtp.quit()
使用 smtplib.SMTP
代替 smtplib.SMTP_SSL
。