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.
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')
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)
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.
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()
Cela devrait le corriger:
Remplacez mail_me(cont,['xyz@xyzcom'])
par
mail_me(cont,'[email protected]')
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.