2017-01-20 1 views
0

Je souhaite envoyer un e-mail via python affichant un logo. L'image est une image png dans le même répertoire.Joindre une image PNG en Python Email

J'utilise un simple code que j'ai trouvé ici dans le but, mais quand je l'envoie à mon propre compte, il n'y a pas d'image. Il n'y a pas de pièce jointe à référencer pour produire l'image. Quelqu'un pourrait-il me dire ce qu'il me manque?

from tkinter import * 
import smtplib 
from email.mime.multipart import MIMEMultipart 
from email.mime.text import MIMEText 
from email.mime.image import MIMEImage 
import csv 
import time 
from string import Template 
import warnings 

root = Tk() 
root.geometry('200x200') 

email_label = Label(root, text="Enter your email") 
email_label.pack() 

username = Entry(root, width = 30) 
username.pack() 

password_label = Label(root, text="Enter your password") 
password_label.pack() 

password = Entry(root, show="*", width = 30) 
password.pack() 


def add_var(): 
    a = 0 
    user_name = username.get() 
    pass_word = password.get() 
    with open("emailtk.csv") as f: 
     reader = csv.reader(f) 
     for row in reader: 
      a+=1 
      time.sleep(3) 
      try: 
       address = row[0] 
       first_name = row[1] 
       last_name = row[2] 
       name = first_name+last_name 
       company = row[4] 
       print("Event", a) 
       print("Will now send an email to %s %s at %s at %s" % (first_name, last_name, company, address)) 
       msg = MIMEMultipart('alternative') 
       msg['Subject'] = "Link" 
       msg['From'] = user_name 
       msg['To'] = address 
       html = """\ 
       <html> 
        <head></head> 
        <body> 
        <p> 
         stuff 
        </p> 
        </body> 
       </html> 
       """.format(n = name, org = company) 
       part1 = MIMEText(html, 'html') 
       msg.attach(part1) 

       img = "logo.png" 
       img_data = open(img, "rb").read() 
       image = MIMEImage(img_data, name = os.path.basename(img)) 
       msg.attach(image) 
       msg.attach(msgImage) 

       s = smtplib.SMTP('Server.com', Socket) 
       s.ehlo() 
       s.starttls() 
       s.login(user_name,pass_word) 
       s.sendmail(user_name, address, msg.as_string()) 
       print("email sent") 
       s.quit() 
      except: 
      pass 
      print("Done") 

button = Button(root, text = "Submit", command = add_var) 
button.pack() 

root.mainloop() 

Voici le code que je utilise pour attacher l'image:

img = "logo.png" 
img_data = open(img, "rb").read() 
image = MIMEImage(img_data, name = os.path.basename(img)) 
msg.attach(image) 
+0

Vous devez afficher les en-têtes réels qui apparaissent dans le message que vous recevez. Si vous l'envoyez à quelqu'un sur une plate-forme différente, le logo apparaît-il? Si vous l'envoyez sur un autre compte sur la même plate-forme, le logo apparaît-il? Juste pour être prudent, essayez de fermer le fichier ** après ** le message a été envoyé ('s.sendmail (nom d'utilisateur, adresse, msg.as_string()); fp.close()') – sabbahillel

+0

Je viens d'éditer le code pour montrer une approche différente que j'essaie, mais toujours pas de chance. Et si vous parlez des en-têtes comme dans le courriel, il n'y a pas de pièce jointe. – SVill

+0

Vous devriez montrer les en-têtes réels que vous recevez dans votre question. Vérifiez également le courrier reçu par un autre compte ou une plate-forme différente. – sabbahillel

Répondre