2010-10-04 8 views
4

J'essaie de m'enseigner comment programmer en construisant des programmes/scripts qui me seront utiles. J'essaie de réorganiser un script que j'ai trouvé en ligne pour envoyer un email via gmail en utilisant un script python (Source).Envoyer un e-mail à partir de Gmail en utilisant Python

Cet exemple a une partie de code pour attacher des fichiers, dont je ne veux pas/besoin. J'ai modifié le code afin que je n'aie pas à joindre de fichiers, mais quand je fais cela, je perds le corps de l'e-mail. Toute aide/conseils sur la façon de modifier le code pour garder le corps de l'e-mail intact?

Appréciez l'aide.

+0

Post ce que vous avez –

+0

Dominic, merci pour la réponse. J'ai continué à jouer en commentant différentes lignes et j'ai été capable de recommencer à le faire fonctionner. Il s'avère que je devais laisser dans la ligne "msg.attach (MIMEText (texte))" qui me confond encore un peu, parce que je lis la partie msg.attach pour joindre des fichiers, pas le corps de l'email. Si quelqu'un peut expliquer cela, ce serait très apprécié. – SeanK137

+1

L'exemple de code que vous utilisez crée un message MIME en plusieurs parties. EVerything est une pièce jointe, y compris le corps du message. Si vous voulez simplement envoyer un simple message en texte simple ou en HTML, vous n'avez besoin d'aucun des éléments MIME. Je posterai une réponse avec du code. – kindall

Répondre

5

L'exemple de code que vous utilisez crée un message MIME en plusieurs parties. Tout est un attachement, y compris le corps du message. Si vous voulez simplement envoyer un simple message en texte simple ou en HTML, vous n'avez besoin d'aucun des éléments MIME. Cela ajoute simplement de la complexité. Vous voyez ce bit dans l'appel sendmail() de votre exemple où il est dit msg.as_string()? Eh bien, cela convertit simplement les objets MIME que vous avez créés en texte. Il est assez facile de spécifier le texte vous-même, si vous traitez un texte pour commencer.

La fonction ci-dessous est similaire au code I utilisé pour l'envoi d'un fichier journal dans un script que j'ai écrit. Il prend un corps de texte brut et le convertit en HTML préformaté (pour mieux fonctionner dans Outlook). Si vous souhaitez conserver le texte en clair, supprimez la ligne qui ajoute les balises HTML et remplacez l'en-tête Content-Type par "text/plain".

import smtplib 

def sendmail(sender, recipient, subject, body, server="localhost"): 
    "Sends an e-mail to the specified recipient." 

    body = ("<html><head></head><body><pre>%s</pre></body></html>" % 
      body.replace("&", "&amp;").replace("<", "&lt;")) 

    headers = ["From: " + sender, 
       "Subject: " + subject, 
       "To: " + recipient, 
       "MIME-Version: 1.0", 
       "Content-Type: text/html"] 
    headers = "\r\n".join(headers) 

    session = smtplib.SMTP(server) 
    session.sendmail(sender, recipient, headers + "\r\n\r\n" + body)     
    session.quit() 
+0

Merci gentil, j'apprécie! – SeanK137

+0

De rien; bienvenue à SO et à Python. – kindall

1

Je vois que vous avez une idée de ce que vous avez mal fait.

Dans ce cas, la méthode attach() fait référence à l'ajout d'un élément à l'e-mail. C'est déroutant parce que quand on pense à joindre des choses et des courriels, on pense à ajouter des fichiers supplémentaires, pas le corps.

Basé sur un autre examples, il semble que la méthode attach est utilisée pour ajouter du texte au corps ou un fichier à l'email. Donc, pour répondre à votre question, la méthode attach fait ce que vous pensez faire et plus - elle ajoute aussi du texte au corps.

Bienvenue à SO, soit dit en passant. Choix judicieux de choisir Python pour apprendre à écrire.

+0

Merci Rafe, j'apprécie! – SeanK137

Questions connexes