Azure Communication Services Delivery
The code below transmits your reports via email using Azure Communication Services, bypassing common issues with SMTP servers.
To use this method, you must have…
- Setup Azure Communication Services and the Email Services,
- Created an access key and a 'NoReply' email address.
- Added the key and address to your settings, as azurekey and azureemail respectively,
- Installed the azure.communication package in Python on the ReportList server.
import os import json import traceback import base64 def GetFileContent(fname): content = None with open(fname,'rb') as img: content = base64.b64encode(img.read()) return content pth = os.path.dirname(__file__) + "/content.json" f = open(pth,'r') content = f.read() f.close() content = json.loads(content) messages = content['messages'] comkey = content["options"]["azurekey"] fromaddr = content["options"]["azureemail"] from azure.communication.email import EmailClient try: connection_string = "endpoint=https://cservices.australia.communication.azure.com/;accesskey=" + comkey client = EmailClient.from_connection_string(connection_string) for msg in messages: try: toaddress = msg['to'] recip = [] recip.append({"address": toaddress['name']}) message = { "senderAddress": str(fromaddr), "recipients": { "to": recip, }, "content": { "subject": msg['title'], "plainText": msg['content'], "html": msg['richcontent'] }, "attachments": [] } for at in msg['attachments']: nitem = {} ct = GetFileContent(at['path']) if ct is not None: nitem['name'] = at['name'] nitem['contentType'] = at['contenttype'] nitem['contentInBase64'] = ct.decode() message['attachments'].append(nitem) #print(str(message)) poller = client.begin_send(message) result = poller.result() print("-----") print("SUCCESS") except: print("-----") print("FAILURE") traceback.print_exc() pass except Exception as ex: print("-----") print("FAILURE")