2013-10-25 14 views
5

Ciao Sto cercando di scrivere un servizio di posta separato che è disaccoppiato con la nostra applicazione di flask. Quindi sto cercando un modo per inviare e-mail di benvenuto quando gli utenti accedono per la prima volta alla nostra applicazione di flask. Sto usando Celery e rabbitmq per farlo in modo asincrono.Utilizzo di modelli html per inviare e-mail in python

Qui è la mia funzione e-mail -

sen = '[email protected]' 
pwd = 'my_password' 

@celery.task 
def send_email(nickname, email): 
    msg = MIMEMultipart('alternative') 
    msg['Subject'] = 'my_sub' 
    msg['From'] = sen 
    msg['To'] = email 

    html = <b>test_body</b> 

    part1 = MIMEText(html, 'html') 
    msg.attach(part1) 

    server = smtplib.SMTP("smtp.gmail.com", 587) 
    server.ehlo() 
    server.starttls() 
    server.login(sen, pwd) 
    server.sendmail(sen, [email], msg.as_string()) 
    server.close() 

Inizialmente usavo render_template del pallone per ottenere il corpo html e soggetto. Ma non voglio usare l'estensione del pallone (ho le mie ragioni). Quindi le mie domande sono:

1) Come posso utilizzare i modelli di email in modo che i campi soggetto e corpo possano essere configurati facilmente?

2) Come posso inserire il mittente e la password di posta elettronica predefiniti in un file di configurazione/modello di posta elettronica (potrebbe essere correlato a q1)?

3) Sembra che abbia un sacco di codice per inviare una semplice email. Puoi suggerire alcune tecniche di ottimizzazione (omettendo i passaggi)?

Grazie in anticipo per tutto il vostro aiuto.

+0

Un altro motivo per utilizzare il modello di e-mail: passare i parametri. Al fine di inviare e-mail personalizzate. – user2216194

+1

Se non si desidera utilizzare il motore di template come 'jinja2', si prenderà in considerazione la [python standard library string.Template] (http://docs.python.org/2/library/string.html#template- stringhe) che fornisce semplici sostituzioni di stringhe. –

+0

@ user2216194, ho anche requisiti simili, hai trovato una soluzione? e qual è la tua ragione per non usare jinja? o perché non render_template? (modifica: mi aiuterà nella valutazione delle soluzioni) –

risposta

0

Potrebbe essere più semplice utilizzare un servizio esterno.

Un servizio (ad esempio Mailchimp) è semplice da integrare. Puoi progettare il modello nel loro livello e attivare le email inviando i dati di unione dalla tua app all'API del servizio. Funzionalmente è molto simile a renderizzare un modello localmente e spedirlo via SMTP, ma hanno strumenti sofisticati per adattare il formato dei messaggi ai dispositivi, rintracciare rimbalzi, migliorare deliverability, reporting ecc.

Servizi come questo spesso hanno un livello gratuito per fino a 1000 di email al mese.