web-dev-qa-db-ja.com

pythonのメールのfromフィールドに送信者の名前を追加します

以下のコードでメールを送信しようとしています。

import smtplib
from email.mime.text import MIMEText

sender = '[email protected]'

def mail_me(cont, receiver):
    msg = MIMEText(cont, 'html')
    recipients = ",".join(receiver)
    msg['Subject'] = 'Test-email'
    msg['From'] = "XYZ ABC"
    msg['To'] = recipients
    # Send the message via our own SMTP server.
    try:
        s = smtplib.SMTP('localhost')
        s.sendmail(sender, receiver, msg.as_string())
        print "Successfully sent email"
    except SMTPException:
        print "Error: unable to send email"
    finally:
        s.quit()


cont = """\
   <html>
     <head></head>
     <body>
       <p>Hi!<br>
          How are you?<br>
          Here is the <a href="http://www.google.com">link</a> you wanted.
       </p>
     </body>
   </html>
   """
mail_me(cont,['xyz@xyzcom'])

「XYZ ABC」をメール受信時に送信者名、メールアドレスを「[email protected]」と表示したい。しかし、電子メールを受信すると、電子メールメッセージの「送信元」フィールドに奇妙な詳細が表示されます。

[![from:    XYZ@<machine-hostname-appearing-here>
reply-to:   XYZ@<machine-hostname-appearing-here>,
ABC@<machine-hostname-appearing-here>][1]][1]

受け取ったメールのスクリーンショットを添付しました。

必要に応じて、これをどのように修正できますか?.

9
cool77

これはうまくいくはずです:

msg['From'] = "Your name <Your email>"

以下の例:

import smtplib
from email.mime.text import MIMEText

def send_email(to=['[email protected]'], f_Host='example.example.com', 
f_port=587, f_user='[email protected]', f_passwd='example-pass', 
subject='default subject', message='content message'):
smtpserver = smtplib.SMTP(f_Host, f_port)
smtpserver.ehlo()
smtpserver.starttls()
smtpserver.ehlo
smtpserver.login(f_user, f_passwd) # from email credential
msg = MIMEText(message, 'html')
msg['Subject'] = 'My custom Subject'
msg['From'] = "Your name <Your email>"
msg['To'] = ','.join(to)
for t in to:
    smtpserver.sendmail(f_user, t, msg.as_string())  # you just need to add 
this in for loop in your code.
    smtpserver.close()
print('Mail is sent successfully!!')


cont = """\
<html>
 <head></head>
 <body>
   <p>Hi!<br>
      How are you?<br>
      Here is the <a href="http://www.google.com">link</a> you wanted.
   </p>
 </body>
</html>
"""
try:
send_email(message=cont)
except:
print('Mail could not be sent')
9
Matheus Candido

名前はFROMヘッダーに由来します。この回答を参照してください Python(smtplib))でメールを送信するときに送信者を指定してください

0
kawadhiya21
import smtplib
from email.mime.text import MIMEText

def send_email(to=['[email protected]'], f_Host='example.example.com', f_port=587, f_user='[email protected]', f_passwd='example-pass', subject='default subject', message='content message'):
    smtpserver = smtplib.SMTP(f_Host, f_port)
    smtpserver.ehlo()
    smtpserver.starttls()
    smtpserver.ehlo
    smtpserver.login(f_user, f_passwd) # from email credential
    msg = MIMEText(message, 'html')
    msg['Subject'] = 'My custom Subject'
    msg['From'] = "Admin"
    msg['To'] = ','.join(to)
    for t in to:
        smtpserver.sendmail(f_user, t, msg.as_string())  # you just need to add this in for loop in your code.
        smtpserver.close()
    print('Mail is sent successfully!!')


cont = """\
   <html>
     <head></head>
     <body>
       <p>Hi!<br>
          How are you?<br>
          Here is the <a href="http://www.google.com">link</a> you wanted.
       </p>
     </body>
   </html>
   """
try:
    send_email(message=cont)
except:
    print('Mail could not be sent')

上記の方法私は自分のGmailアカウント(スパムフォルダー内)にメールを送信できても、うまくいくメールを送信しようとしました。他に関連する問題が発生した場合はお知らせください。

0
Gahan

次のコードをgmx.comでテストしたところ、問題なく動作しました。ただし、同じ走行距離を取得するかどうかは問題のポイントです。
メールサービスへの参照をすべてgmailに置き換えました

#!/usr/bin/python

#from smtplib import SMTP # Standard connection
from smtplib import SMTP_SSL as SMTP #SSL connection
from email.MIMEMultipart import MIMEMultipart
from email.MIMEText import MIMEText

sender = '[email protected]'
receivers = ['[email protected]']


msg = MIMEMultipart()
msg['From'] = '[email protected]'
msg['To'] = '[email protected]'
msg['Subject'] = 'simple email via python test 1'
message = 'This is the body of the email line 1\nLine 2\nEnd'
msg.attach(MIMEText(message))

ServerConnect = False
try:
    smtp_server = SMTP('smtp.gmail.com','465')
    smtp_server.login('#name#@gmail.com', '#password#')
    ServerConnect = True
except SMTPHeloError as e:
    print "Server did not reply"
except SMTPAuthenticationError as e:
    print "Incorrect username/password combination"
except SMTPException as e:
    print "Authentication failed"

if ServerConnect == True:
    try:
        smtp_server.sendmail(sender, receivers, msg.as_string())
        print "Successfully sent email"
    except SMTPException as e:
        print "Error: unable to send email", e
    finally:
        smtp_server.close()
0
Rolf of Saxony

これはそれを修正するはずです:

mail_me(cont,['xyz@xyzcom'])

mail_me(cont,'[email protected]')
0
TheDarkKnight

スペースは、メールアドレスの有効な文字ではありません。特殊文字は、二重引用符で囲まれる外部表現でのみ許可されます。さらに、ほとんどのSMTPサーバーは実際にヘッダーの書き換えを使用して、アドレスが標準形式であることを確認します。あなたの実際にはスペースが含まれているため、スペースが分割され、引用符で囲まれていないため、サーバーアドレスが追加されます。

msg['From'] = "XYZ ABC"

msg['From'] = '"XYZ ABC"'

二重引用符でアドレスを強制的に含める。

0
Serge Ballesta