2016-11-28 1 views
1

J'essaie d'utiliser xlsxwriter pour générer un fichier xlsx, puis l'envoyer en pièce jointe dans un courrier électronique. Voici ce que j'ai maintenant:Django: TypeError empêchant d'attacher un objet de type octets à un courrier électronique

def WriteToExcel(project): 
    output = BytesIO() 
    workbook = xlsxwriter.Workbook(output) 

    #putting in data 

    workbook.close() 
    xlsx_data = output.getvalue() 
    # xlsx_data contains the Excel file 
    return xlsx_data 

def project_email (request, project_id): 
    project = Project.objects.get(id = project_id) 
    xlsx_data = WriteToExcel(project) 

    message = EmailMessage("Heading", 'Here is the message.', 'HOST', ['[email protected]']) 

    message.attach_file(xlsx_data) 
    message.send() 

Et quand j'ai essayé d'envoyer l'e-mail, je l'erreur suivante:

TypeError at /projstatus/1/email

cannot use a string pattern on a bytes-like object

Est-il possible que je puisse en faire le tour? Comme, faites le fichier xlsx non-binaire ou s'il y a une fonction dans l'email pour attacher le fichier binaire?

Répondre

1

En fait, j'ai compris ce problème. Vous avez juste besoin de quelque chose comme ceci:

def project_email (request, project_id): 
    project = Project.objects.get(id = project_id) 
    xlsx_data = WriteToExcel(project) 

    message = EmailMessage("Heading", 'Here is the message.', 'HOST', ['[email protected]']) 

    message.attach("Report.xlsx", xlsx_data, 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet') 
    message.send() 

Je me contenterai ici quitté ce cas d'autres personnes qui se demandent la même chose