J'essaye d'écrire une fonction Python pour envoyer un email à une liste d'utilisateurs, en utilisant le client de messagerie installé par défaut. Je veux ouvrir le client de messagerie, et donner à l'utilisateur la possibilité de modifier la liste des utilisateurs ou le corps de l'e-mail.Python - Ouvrir le client de messagerie par défaut en utilisant mailto, avec plusieurs destinataires
Je l'ai fait quelques recherches, et selon ici:
http://www.sightspecific.com/~mosh/WWW_FAQ/multrec.html
Il est apparemment contre la spécification RFC mettre plusieurs destinataires séparés par des virgules dans un lien mailto. Cependant, c'est comme ça que tout le monde semble le faire. Quelle est exactement la position moderne à ce sujet?
Quoi qu'il en soit, j'ai trouvé les deux sites suivants:
- http://2ality.blogspot.com/2009/02/generate-emails-with-mailto-urls-and.html
- http://www.megasolutions.net/python/invoke-users-standard-mail-client-64348.aspx
qui semblent suggérer des solutions à l'aide urllib.parse (url.parse.quote pour moi), et webbrowser.open.
J'ai essayé l'exemple de code du premier lien (2ality.blogspot.com), et cela a bien fonctionné, et ouvert mon client de messagerie par défaut. Cependant, lorsque j'essaie d'utiliser le code dans mon propre module, il semble ouvrir mon navigateur par défaut, pour une raison étrange. Pas de texte drôle dans la barre d'adresse, ça ouvre juste le navigateur. La fonction email_incorrect_phone_numbers() est dans la classe Employees, qui contient un dictionnaire (employee_dict) des objets Employee, eux-mêmes dotés d'un certain nombre d'attributs employés (sn, givenName, mail, etc.). code complet est en fait ici (Python - Converting CSV to Objects - Code Design)
from urllib.parse import quote
import webbrowser
....
def email_incorrect_phone_numbers(self):
email_list = []
for employee in self.employee_dict.values():
if not PhoneNumberFormats.standard_format.search(employee.telephoneNumber):
print(employee.telephoneNumber, employee.sn, employee.givenName, employee.mail)
email_list.append(employee.mail)
recipients = ', '.join(email_list)
webbrowser.open("mailto:%s?subject=%s&body=%s" %
(recipients, quote("testing"), quote('testing'))
)
Toutes les suggestions?
Cheers, Victor
+1, je seconde le mouvement. –
Hmm, oui, il semble que mailto est assez cassé. Le seul problème est que nous voulons que l'utilisateur puisse éditer la liste mailto, le sujet et le corps s'ils le souhaitent. Ouverture de leur client de messagerie avec des choses pré-remplies est un bon moyen de le faire. En outre, il s'agit d'un environnement d'entreprise assez homogène, nous savons donc quel client de messagerie l'utilisateur aura, et comment leur environnement est configuré. Cela, et c'est un utilitaire qui est vraiment seulement exécuté par un utilisateur (au moins pour l'instant). – victorhooi
Et d'autre part, smtplib n'est pas vraiment une option, puisqu'il s'agit d'un environnement d'entreprise. C'est un petit utilitaire qui fonctionne sur le bureau d'un utilisateur, il n'y a pas de serveurs SMTP internes auxquels nous aurions accès, et nous ne pouvons pas pointer vers des serveurs externes à cause du proxy/pare-feu de l'entreprise (et nous ne devrions pas le faire non plus). N'y a-t-il pas une manière propre de faire cela, économiser pour utiliser un serveur SMTP? Votre dernière option semble intrigante, mais vous ne savez pas comment la réaliser. – victorhooi