Can someone help me send an email from my exchange account and add attachments. SMTP doesnt work, I get immediate timeout issues. 0365 doesn’t save a copy to my sent folder. The only other one I know is exchangelib
from exchangelib import Account, Credentials, Message, Mailbox, FileAttachment from email.mime.multipart import MIMEMultipart from email.mime.base import MIMEBase from email.mime.text import MIMEText from email.utils import formatdate from email import encoders email = 'XXXXXXXX' password = 'XXXXXXXX' a = Account(email, credentials=Credentials(email, password), autodiscover=True) dir_path = ('C:/Users/Istcrmt/Documents/Python/PythonforAnaconda3.5/') excel_name = 'test.xlsx' #attach an excel file: for i in email_list.itertuples(): # if you want a copy in the 'Sent' folder m = Message( account=a ,folder=a.sent ,subject=(i.AGENCY_NAME + ' I made an email script.') ,body='All bodies are beautiful' ,to_recipients=[Mailbox(email_address=i.NEW_MAIL)]) #attach files m.attachments.append(part) # m.attach(cover_letter) m.send_and_save()
Advertisement
Answer
This is how you send emails with an attachment with exchangelib
:
from exchangelib import ServiceAccount, Configuration, Account, DELEGATE from exchangelib import Message, Mailbox, FileAttachment from config import cfg # load your credentials def send_email(account, subject, body, recipients, attachments=None): """ Send an email. Parameters ---------- account : Account object subject : str body : str recipients : list of str Each str is and email adress attachments : list of tuples or None (filename, binary contents) Examples -------- >>> send_email(account, 'Subject line', 'Hello!', ['info@example.com']) """ to_recipients = [] for recipient in recipients: to_recipients.append(Mailbox(email_address=recipient)) # Create message m = Message(account=account, folder=account.sent, subject=subject, body=body, to_recipients=to_recipients) # attach files for attachment_name, attachment_content in attachments or []: file = FileAttachment(name=attachment_name, content=attachment_content) m.attach(file) m.send_and_save() credentials = ServiceAccount(username=cfg['user'], password=cfg['password']) config = Configuration(server=cfg['server'], credentials=credentials) account = Account(primary_smtp_address=cfg['smtp_address'], config=config, autodiscover=False, access_type=DELEGATE) # Read attachment attachments = [] with open('filestorage/numbers-test-document.pdf', 'rb') as f: content = f.read() attachments.append(('whatever.pdf', content)) # Send email send_email(account, 'Test 14:35', 'works', ['info@example.com'], attachments=attachments)
Related: Read emails and download attachment from an Exchange Server