Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
11 changes: 7 additions & 4 deletions gmail/snippet/send mail/create_draft.py
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand All @@ -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",
Expand Down
31 changes: 22 additions & 9 deletions gmail/snippet/send mail/create_draft_with_attachment.py
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand All @@ -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",
Expand Down
13 changes: 7 additions & 6 deletions gmail/snippet/send mail/send_message.py
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand All @@ -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
Expand Down
68 changes: 23 additions & 45 deletions gmail/snippet/send mail/send_message_with_attachment.py
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand All @@ -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
Expand All @@ -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]