代码之家  ›  专栏  ›  技术社区  ›  duhaime

Python smtplib:如何发送看起来像是从电子邮件帐户发送的电子邮件的消息

  •  0
  • duhaime  · 技术社区  · 5 年前

    我试图用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本身发送的消息?

    其他人对这个问题的任何建议都会非常有用!

    0 回复  |  直到 5 年前
        1
  •  0
  •   duhaime    5 年前

    为了弄明白这一点,我从Gmail发送了一封电子邮件,然后点击发送消息旁边的三个点,然后点击“Show Original”,它显示了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)