Python smtplib:如何发送类似于从电子邮件帐户发送的电子邮件的消息

时间:2019-02-22 16:12:05

标签: python sms smtplib

我正在尝试使用Python向自己发送短信。为此,我创建了一个Gmail帐户,打开了less secure apps,并运行了以下代码:

import smtplib
from email.mime.text import MIMEText

# Establish a secure session with gmail's outgoing SMTP server using your gmail account
server = smtplib.SMTP('smtp.gmail.com', 587)
server.set_debuglevel(1)
server.ehlo()
server.starttls()
server.login('me@gmail.com', 'pw!' )

msg = '\r\n'.join([
  'From: me@gmail.com',
  'To: 5551234567@tmomail.net',
  'Subject: Cats',
  '',
  'on wheels'
])

# sendmail(from, to, msg)
server.sendmail('me@gmail.com', '5551234567@tmomail.net', msg)

这确实向我的手机发送了一条短信,但该消息显示如下:

me@gmail.com / Cats / on wheels

此外,我的短信列表中的“发件人”代理会显示为随机连字符对,例如“ 970-2”或“ 910-2”。

但是,当我从gmail自身向我的电话号码发送一条消息时,它在我的短信列表中显示为“ me@gmail.com”,并显示如下:

<b>Subject is here</b>
Body of email is here

我是否可以更改上面的msg对象,以使从Python发送的邮件像从Gmail本身发送的邮件一样显示?

任何其他人可以在这个问题上提出的建议将大有帮助!

1 个答案:

答案 0 :(得分:0)

要弄清楚这一点,我从Gmail发送了一封电子邮件,然后单击已发送邮件旁边的三个点,然后单击“显示原始邮件”,显示了Gmail服务器传递的完整数据包。然后我将这些字段添加到我的消息中:

import smtplib
import email.mime.multipart

# Establish a secure session with gmail's outgoing SMTP server using your gmail account
server = smtplib.SMTP('smtp.gmail.com', 587)
server.set_debuglevel(1)
server.ehlo()
server.starttls()
server.login('me@gmail.com', pw)

msg = '\r\n'.join([
  'MIME-Version: 1.0',
  'Date: Fri, 22 Feb 2019 11:29:27 -0500',
  'Message-ID: <CAKyky413ikdYD4-Oq_H_FPF-g__weSFehQNLVuspotupWhJaLA@mail.gmail.com>',
  'Subject: wow on what',
  'From: Ludwig Wittgenstein <me@gmail.com>',
  'To: 5551234567@tmomail.net',
  'Content-Type: multipart/alternative; boundary="0000000000003c664305827e1862"',
  '',
  '--0000000000003c664305827e1862',
  'Content-Type: text/plain; charset="UTF-8"',
  '',
  'weeeee',
  '',
  '--0000000000003c664305827e1862',
  'Content-Type: text/html; charset="UTF-8"',
  'Content-Transfer-Encoding: quoted-printable',
  '',
  '<div dir=3D"ltr">here=C2=A0</div>',
  ''
  '--0000000000003c664305827e1862--'
])

# sendmail(from, to, msg)
server.sendmail('me@gmail.com', '5551234567@tmomail.net', msg)