Sending an email with an attached file from a notebook

Angelina
Level 1
Sending an email with an attached file from a notebook

Hi,

 

I'm currently working on a DSS project with a notebook in which I manipulate/modify/update excel files.
At the end of the treatment I would like to send several emails to attest that the program completed the job and that everything went well for each resulting excel file. Thus, each email sent would have its associated excel file in attached piece.

 

I found examples of codes for sending emails with folders or datasets as attached pieces, but not files.

This is the function that I currently use, it only half works because I receive the emails, the title and the content, but not the attached files :

 

def sending_mail(extraction_type, partner, sharepoint_path, file):
    s = MessageSender(channel_id='id1', type='mail-scenario', configuration={})
    attachment = {
                  "type": "FILE",
                  "params": {
                    "exportParams": {
                      "selection": {
                        "samplingMethod": "FULL"
                      },
                      "format": {
                        "type": "csv",
                        "params": {
                          "style": "excel",
                          "charset": "utf8",
                          "separator": ",",
                          "quoteChar": "\"",
                          "escapeChar": "\\",
                          "parseHeaderRow": True
                        }
                      }
                    },
                    "attachedFile": file
                  }
                }
    
    content = "Data of type : {}, concerning the site of {} have been broadcasted on the sharepoint of this Partner : {}".format(extraction_type, partner, sharepoint_path)
    topic = "Broadcast of `{}` to {}".format(extraction_type, partner)
    # print(attachment)
    s.send(message=content, subject=topic, recipient='myemail@something.com', attachments=[attachment])
    print("Mail sent for partner {}".format(partner))

 

I hope I explained well the matter and that my problem is clear enough, let me know if it is not.
Thank you in advance for your help.


Operating system used: Windows

0 Kudos
4 Replies
AlexT
Dataiker

@Angelina ,

Just posting here as well as you have resolved this over another channel. 
To attach files, you can do this if the files are in a managed folder in DSS using "FOLDER_ITEM" type.

 

import dataiku
from dataiku import pandasutils as pdu
from dataiku.core.message_sender import MessageSender

#change email channel id
s = MessageSender(channel_id='my-email-channel', type='mail-scenario', configuration={})
#replace folderID found in URL of managed folder and readme.txt with atactual filename to attach
attachment = {
                "type": "FOLDER_ITEM",
                 "params": {
                            "folderId": "X9SD9y5B", 
                            "attachedItemPath": "readme.txt"
                        } 
                    }
        
s.send(message="something", subject="test", recipient='email@doimain', attachments=[attachment])

 

 

Thanks,

s_dravid
Level 3

This has enabled me to send the email but without attachments. The file in the managed folder is in .xlsx format.

Could you please advise on this?

0 Kudos
fbu
Level 1

Hello,
here's the code we used successfully to send .xlsx files.

FB

def sending_file_mail(mail_dest, my_title, file):
s = MessageSender(channel_id='id1', type='mail-scenario', configuration={})

attachment = {
"type": "FOLDER_ITEM",
"params": {
'folderId': "WgsjIQOl",
'attachedItemPath': file
}
}

topic = "{}".format(my_title)
s.send(message="", subject=topic, recipient=mail_dest, attachments=[attachment])

0 Kudos
s_dravid
Level 3

Thanks for your response, but I am still unable to get the attachments. I am using version 11 of DSS. Is there something that I might have to try along with this code?

Also, where are you running this code? In a notebook or a python code step in a scenario?

Also, in place of 'file' do I need to give only the filename with extension or the complete path of the file storage?

0 Kudos