2016-04-26 37 views
7

Sto utilizzando win32com.client, python 2.7.x e outlook 2013 sulla piattaforma windows.Outlook 2013 visualizza il codice HTML invece dei dati effettivi

Ho bisogno di pubblicare il contenuto di un file HTML nel corpo del messaggio outlook.
Ho seguito i post here, here e here su come salvare Excel come HTML e incollare i dati all'interno di outlook.

Tuttavia, quando ho letto il file tramite win32com.client.Dispatch, invece di vedere il messaggio, sto vedendo il codice HTML.

Ecco il codice che converte un file elaborato xlsx in formato html utilizzando win32.com.

#Section to convert excel workbook to html 

    myfile = os.getcwd()+ "\\" + outfile 
    newfile = os.getcwd()+ "\\" + "emailData.html" 
    xl = EnsureDispatch('Excel.Application') 
    #xl.Visible = True 
    wb3 = xl.Workbooks.Open(myfile) 
    wb3WorkSheet = wb3.Worksheets(1) 
    wb3WorkSheet.Activate() 
    wb3.SaveAs(newfile, constants.xlHtml) 
    wb3.Close(True) 
    xl.Workbooks.Close() 
    xl.Quit() 
    del xl 

L'uscita di cui sopra è newfile che è fondamentalmente un export di file di xlsx salvato in formato HTML. Viene quindi aperto tramite il gestore mail.body che dovrebbe leggere e visualizzare i contenuti effettivi in ​​Outlook.

Ecco il codice per questo.

from win32com.client.gencache import EnsureDispatch 
from win32com.client import constants, Dispatch 
#Create and open mail message 
def Emailer(text, subject, recipient): 
    outlook = Dispatch('outlook.application') 
    mail = outlook.CreateItem(0) 
    mail.To = recipient 
    mail.Subject = subject 
    mail.HtmlBody = text 
    #mail.HtmlBody = open(newfile).read() 
    mail.body = open(newfile).read() 
    attachment1 = os.getcwd()+"//"+outfile 
    mail.Attachments.Add(attachment1) 
    mail.Display(True) 

Emailer(pageTemplate,   
     "test subject", 
     "[email protected]" 
     ) 

Così, quando ho aperto newfile (file html) utilizzando mail.body = open(newfile).read() si paste html content all'interno di un nuovo corpo di Outlook e-mail.

Quando apro newfile (file html) utilizzando mail.HtmlBody = open(newfile).read() è dare seguente errore all'interno del corpo outlook email

ERROR: This page uses frames, but your browser doesn't support them.

Tutte le idee su questo comportamento?

In pratica voglio copiare/incollare il file html (che è un'esportazione di xlsx) nell'e-mail di Outlook. Non sono sicuro se sopra è l'approccio corretto o ci sono altre alternative.

C'è un modo per incollare/rendere i frame HTML nel corpo dell'e-mail di Outlook?

Qualsiasi indicazione è apprezzata.

risposta

1

È necessario impostare la proprietà HTMLBody, ma tenere presente che l'HTML in Outlook è rappresentato da Word, non da IE, e i frame incorporati non sono supportati.

+0

Quando imposto 'HTMLBody', ottengo l'errore' frame' perché i dati HTML hanno dei frame. Non posso evitarlo. C'è un modo per incollare/rendere il frame nel corpo dell'e-mail di Outlook? –

+0

No, come ho detto prima, l'HTML è gestito da Word, non da IE. Visualizzerà l'HTML all'esterno dei frame, ma i frame non verranno caricati. Ricorda, Word non va in rete per scaricare i frame. Il tuo HTML deve essere autonomo. –

+0

Ho capito, ma come mai una semplice copia e incolla dello stesso contenuto HTML con frame da Excel a Outlook funziona? C'è un modo per ottenerlo attraverso un codice? –