web-dev-qa-db-fra.com

ajouter le nom de l'expéditeur dans le champ from de l'e-mail en python

J'essaie d'envoyer un e-mail avec le code ci-dessous.

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'])

Je souhaite que "XYZ ABC" apparaisse comme le nom de l'expéditeur lorsque l'e-mail est reçu et son adresse e-mail comme "[email protected]". mais quand je reçois un e-mail, je reçois des détails étranges dans les champs "de" de l'e-mail.

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

J'ai joint une capture d'écran de l'e-mail que je reçois.

comment puis-je résoudre ce problème en fonction de mes besoins.

9
cool77

Cela devrait fonctionner:

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

Exemple ci-dessous:

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

Le nom provient de l'en-tête FROM. Référez-vous à cette réponse s'il vous plaît Spécifiez un expéditeur lors de l'envoi de courrier avec 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')

méthode ci-dessus, j'ai essayé d'envoyer du courrier qui fonctionne pour moi même si je peux envoyer du courrier à mon compte gmail (dans le dossier spam). Faites-moi savoir si vous rencontrez un autre problème connexe.

0
Gahan

Je viens de tester le code suivant avec gmx.com et cela fonctionne très bien. Bien, que vous obteniez le même kilométrage est un point discutable.
J'ai remplacé toutes les références à mon service de messagerie par 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

Cela devrait le corriger:

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

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

Un espace n'est pas un caractère valide dans une adresse e-mail. Les caractères spéciaux ne sont autorisés que dans la représentation externe qui doit être placée entre guillemets. De plus, la plupart des serveurs SMTP utilisent réellement la réécriture des en-têtes pour garantir que les adresses sont au format standard. Comme le vôtre contient en fait un espace, il est divisé et comme il n'est pas placé entre guillemets, l'adresse du serveur y est ajoutée.

Il suffit de remplacer msg['From'] = "XYZ ABC" avec

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

forçant l'inclusion de l'adresse entre guillemets.

0
Serge Ballesta