Estoy intentando escribir una función de Python para enviar un correo electrónico a una lista de usuarios, utilizando el cliente de correo instalado por defecto. Quiero abrir el cliente de correo electrónico y darle al usuario la oportunidad de editar la lista de usuarios o el cuerpo del correo electrónico.Python - Abrir el cliente de correo predeterminado usando mailto, con varios destinatarios
lo hice un poco de búsqueda, y según aquí:
http://www.sightspecific.com/~mosh/WWW_FAQ/multrec.html
al parecer es en contra de la especificación RFC poner varios destinatarios separados por comas en un enlace de correo. Sin embargo, esa es la manera en que todos parecen estar haciéndolo. ¿Cuál es exactamente la postura moderna sobre esto?
De todos modos, me encontré con los dos sitios siguientes:
- 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
que parecen sugerir soluciones utilizando urllib.parse (url.parse.quote para mí), y webbrowser.open.
Probé el código de muestra del primer enlace (2ality.blogspot.com), y funcionó bien, y abrí mi cliente de correo predeterminado. Sin embargo, cuando trato de usar el código en mi propio módulo, parece abrir mi navegador predeterminado, por alguna razón extraña. No hay texto gracioso en la barra de direcciones, solo abre el navegador.
La función email_incorrect_phone_numbers() está en la clase Empleados, que contiene un diccionario (employee_dict) de objetos Employee, que a su vez tienen una serie de atributos de empleado (sn, givenName, mail etc.). código completo es en realidad aquí (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'))
)
¿Alguna sugerencia?
Saludos, Victor
+1, secundo el movimiento. –
Hmm, sí, parece que mailto está bastante roto. El único problema es que queremos que el usuario pueda editar la lista de correo, el tema y el cuerpo si lo desea. Abrir su cliente de correo electrónico con cosas pre-pobladas es una buena manera de hacerlo. Además, este es un entorno corporativo bastante homogéneo, por lo que sabemos qué cliente de correo electrónico tendrá el usuario y cómo se configura su entorno. Eso, y es una utilidad que solo es ejecutada por un usuario (al menos por ahora). – victorhooi
Y en segundo lugar, smtplib no es realmente una opción, ya que este es un entorno empresarial. Esta es una pequeña utilidad que se ejecuta en el escritorio de un usuario, no hay servidores SMTP internos a los que tendríamos acceso, y no podemos acceder a los externos debido al proxy/cortafuegos corporativo (y no deberíamos estar haciendo eso). ya sea). ¿No hay una manera clara de hacerlo, excepto por usar un servidor SMTP? Su última opción parece intrigante, pero no está seguro de cómo lograrlo. – victorhooi