diff --git a/gmail/snippet/send mail/create_draft.py b/gmail/snippet/send mail/create_draft.py index cb4a4220..8ee16a6c 100644 --- a/gmail/snippet/send mail/create_draft.py +++ b/gmail/snippet/send mail/create_draft.py @@ -19,7 +19,7 @@ from __future__ import print_function import base64 -from email.mime.text import MIMEText +from email.message import EmailMessage import google.auth from googleapiclient.discovery import build @@ -41,16 +41,19 @@ def gmail_create_draft(): # create gmail api client service = build('gmail', 'v1', credentials=creds) - message = MIMEText('This is automated draft mail') + message = EmailMessage() + + message.set_content('This is automated draft mail') + message['To'] = 'gduser1@workspacesamples.dev' message['From'] = 'gduser2@workspacesamples.dev' message['Subject'] = 'Automated draft' + + # encoded message encoded_message = base64.urlsafe_b64encode(message.as_bytes()).decode() create_message = { - 'message': { 'raw': encoded_message - } } # pylint: disable=E1101 draft = service.users().drafts().create(userId="me", diff --git a/gmail/snippet/send mail/create_draft_with_attachment.py b/gmail/snippet/send mail/create_draft_with_attachment.py index d3735215..4b9e4fee 100644 --- a/gmail/snippet/send mail/create_draft_with_attachment.py +++ b/gmail/snippet/send mail/create_draft_with_attachment.py @@ -24,6 +24,7 @@ from email.mime.image import MIMEImage from email.mime.multipart import MIMEMultipart from email.mime.text import MIMEText +from email.message import EmailMessage import google.auth from googleapiclient.discovery import build @@ -44,21 +45,33 @@ def gmail_create_draft_with_attachment(): try: # create gmail api client service = build('gmail', 'v1', credentials=creds) - mime_message = MIMEMultipart() + mime_message = EmailMessage() + + # headers mime_message['To'] = 'gduser1@workspacesamples.dev' mime_message['From'] = 'gduser2@workspacesamples.dev' mime_message['Subject'] = 'sample with attachment' - text_part = MIMEText('Hi, this is automated mail with attachment.' - 'Please do not reply.') - mime_message.attach(text_part) - image_attachment = build_file_part(file='photo.jpg') - mime_message.attach(image_attachment) + + # text + mime_message.set_content( + 'Hi, this is automated mail with attachment.' + 'Please do not reply.' + ) + + # attachment + attachment_filename = 'photo.jpg' + # guessing the MIME type + type_subtype, _ = mimetypes.guess_type(attachment_filename) + maintype, subtype = type_subtype.split('/') + + with open(attachment_filename, 'rb') as fp: + attachment_data = fp.read() + mime_message.add_attachment(attachment_data, maintype, subtype) + encoded_message = base64.urlsafe_b64encode(mime_message.as_bytes()).decode() create_draft_request_body = { - 'message': { - 'raw': encoded_message - } + 'raw': encoded_message } # pylint: disable=E1101 draft = service.users().drafts().create(userId="me", diff --git a/gmail/snippet/send mail/send_message.py b/gmail/snippet/send mail/send_message.py index 995d1cde..432d2cdb 100644 --- a/gmail/snippet/send mail/send_message.py +++ b/gmail/snippet/send mail/send_message.py @@ -15,7 +15,7 @@ from __future__ import print_function import base64 -from email.mime.text import MIMEText +from email.message import EmailMessage import google.auth from googleapiclient.discovery import build @@ -35,19 +35,20 @@ def gmail_send_message(): try: service = build('gmail', 'v1', credentials=creds) - message = MIMEText('This is automated draft mail') + message = EmailMessage() + + message.set_content('This is automated draft mail') + message['To'] = 'gduser1@workspacesamples.dev' message['From'] = 'gduser2@workspacesamples.dev' message['Subject'] = 'Automated draft' + # encoded message encoded_message = base64.urlsafe_b64encode(message.as_bytes()) \ .decode() create_message = { - 'message': { - - 'raw': encoded_message - } + 'raw': encoded_message } # pylint: disable=E1101 send_message = (service.users().messages().send diff --git a/gmail/snippet/send mail/send_message_with_attachment.py b/gmail/snippet/send mail/send_message_with_attachment.py index a8832250..f375af8a 100644 --- a/gmail/snippet/send mail/send_message_with_attachment.py +++ b/gmail/snippet/send mail/send_message_with_attachment.py @@ -15,12 +15,7 @@ import base64 import mimetypes -import os -from email.mime.audio import MIMEAudio -from email.mime.base import MIMEBase -from email.mime.image import MIMEImage -from email.mime.multipart import MIMEMultipart -from email.mime.text import MIMEText +from email.message import EmailMessage import google.auth from googleapiclient.discovery import build @@ -39,25 +34,37 @@ def gmail_send_message_with_attachment(): creds, _ = google.auth.default() try: + # create gmail api client service = build('gmail', 'v1', credentials=creds) - mime_message = MIMEMultipart() + mime_message = EmailMessage() + + # headers mime_message['to'] = 'gduser1@workspacesamples.dev' mime_message['from'] = 'gduser2@workspacesamples.dev' mime_message['subject'] = 'sample with attachment' - text_part = MIMEText('Hi, this is automated mail with attachment.' - 'Please do not reply.') - mime_message.attach(text_part) - image_attachment = build_file_part(file='photo.jpg') - mime_message.attach(image_attachment) + + # text + mime_message.set_content( + 'Hi, this is automated mail with attachment.' + 'Please do not reply.' + ) + + # attachment + attachment_filename = 'photo.jpg' + # guessing the MIME type + type_subtype, _ = mimetypes.guess_type(attachment_filename) + maintype, subtype = type_subtype.split('/') + + with open(attachment_filename, 'rb') as fp: + attachment_data = fp.read() + mime_message.add_attachment(attachment_data, maintype, subtype) + # encoded message encoded_message = base64.urlsafe_b64encode(mime_message.as_bytes()) \ .decode() send_message_request_body = { - 'message': { - - 'raw': encoded_message - } + 'raw': encoded_message } # pylint: disable=E1101 send_message = (service.users().messages().send @@ -69,35 +76,6 @@ def gmail_send_message_with_attachment(): return send_message -def build_file_part(file): - """Creates a MIME part for a file. - Args: - file: The path to the file to be attached. - Returns: - A MIME part that can be attached to a message. - """ - content_type, encoding = mimetypes.guess_type(file) - if content_type is None or encoding is not None: - content_type = 'application/octet-stream' - main_type, sub_type = content_type.split('/', 1) - if main_type == 'text': - with open(file, 'rb'): - msg = MIMEText('r', _subtype=sub_type) - elif main_type == 'image': - with open(file, 'rb'): - msg = MIMEImage('r', _subtype=sub_type) - elif main_type == 'audio': - with open(file, 'rb'): - msg = MIMEAudio('r', _subtype=sub_type) - else: - with open(file, 'rb'): - msg = MIMEBase(main_type, sub_type) - msg.set_payload(file.read()) - filename = os.path.basename(file) - msg.add_header('Content-Disposition', 'attachment', filename=filename) - return msg - - if __name__ == '__main__': gmail_send_message_with_attachment() # [END gmail_send_message_with_attachment]