Lets learn "How to send mail using google auth in Python"

 




======================= Introduction =====================
This project helps the user to send email using their gmail account using Gmail Python API . Using this project user can send any kind of data (like music file,vedio file,pdf) .
======================= Setup ============================
1. Create a project at https://console.developers.google.com.
2. Enable the Gmail API and Create the Credentials.
3. Download the Credentions in json ( there is an option for downloading the json file ) and copy to the project location as client_secret.json.
4. Modify the main function of send_mail.py according to your requirement.
5. Run the script (python send_mail.py).
6. At first time , It does authorization by opening a browser or giving the link if fails to open the browser . This is one time process.
7. As the authorization is successful , mails will be sent.
You can Download the code from Gauth Send Mail .
Code : 
from __future__ import print_function import httplib2 import os from apiclient import discovery from apiclient.discovery import build import oauth2client from oauth2client import client from oauth2client import tools import base64 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 import mimetypes import os from apiclient import errors try: import argparse flags = argparse.ArgumentParser(parents=[tools.argparser]).parse_args() except ImportError: flags = None # If modifying these scopes, delete your previously saved credentials # at ~/.credentials/gmail-python-quickstart.json SCOPES = 'https://www.googleapis.com/auth/gmail.send' CLIENT_SECRET_FILE = 'client_secret.json' APPLICATION_NAME = 'Gmail API Python Quickstart' def get_credentials(): """Gets valid user credentials from storage. If nothing has been stored, or if the stored credentials are invalid, the OAuth2 flow is completed to obtain the new credentials. Returns: Credentials, the obtained credential. """ home_dir = os.path.expanduser('~') credential_dir = os.path.join(home_dir, '.credentials') if not os.path.exists(credential_dir): os.makedirs(credential_dir) credential_path = os.path.join(credential_dir, 'gmail-python-quickstart.json') store = oauth2client.file.Storage(credential_path) credentials = store.get() if not credentials or credentials.invalid: flow = client.flow_from_clientsecrets(CLIENT_SECRET_FILE, SCOPES) flow.user_agent = APPLICATION_NAME if flags: credentials = tools.run_flow(flow, store, flags) else: # Needed only for compatibility with Python 2.6 credentials = tools.run(flow, store) print('Storing credentials to ' + credential_path) return credentials """Send an email message from the user's account. """ def SendMessage(service, user_id, message): """Send an email message. Args: service: Authorized Gmail API service instance. user_id: User's email address. The special value "me" can be used to indicate the authenticated user. message: Message to be sent. Returns: Sent Message. """ try: message = (service.users().messages().send(userId=user_id, body=message).execute()) print(message['id']) return message['id'] except errors.HttpError, error: return "Error" def CreateMessage(sender, to, subject, message_text): """Create a message for an email. Args: sender: Email address of the sender. to: Email address of the receiver. subject: The subject of the email message. message_text: The text of the email message. Returns: An object containing a base64 encoded email object. """ message = MIMEText(message_text) message['to'] = to message['from'] = "me" message['subject'] = subject return {'raw': base64.b64encode(message.as_string())} def CreateMessageWithAttachment(sender, to, subject, message_text, file_dir, filename): """Create a message for an email. Args: sender: Email address of the sender. to: Email address of the receiver. subject: The subject of the email message. message_text: The text of the email message. file_dir: The directory containing the file to be attached. filename: The name of the file to be attached. Returns: An object containing a base64 encoded email object. """ message = MIMEMultipart() message['to'] = to message['from'] = sender message['subject'] = subject msg = MIMEText(message_text) message.attach(msg) path = os.path.join(file_dir, filename) content_type, encoding = mimetypes.guess_type(path) 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': fp = open(path, 'rb') msg = MIMEText(fp.read(), _subtype=sub_type) fp.close() elif main_type == 'image': fp = open(path, 'rb') msg = MIMEImage(fp.read(), _subtype=sub_type) fp.close() elif main_type == 'audio': fp = open(path, 'rb') msg = MIMEAudio(fp.read(), _subtype=sub_type) fp.close() else: fp = open(path, 'rb') msg = MIMEBase(main_type, sub_type) msg.set_payload(fp.read()) fp.close() msg.add_header('Content-Disposition', 'attachment', filename=filename) message.attach(msg) return {'raw': base64.b64encode(message.as_string())} def main(): """Shows basic usage of the Gmail API. Creates a Gmail API service object and outputs a list of label names of the user's Gmail account. """ credentials = get_credentials() http = credentials.authorize(httplib2.Http()) service = discovery.build('gmail', 'v1', http=http) testMessage = CreateMessage('me', 'recipient_email', 'Subject', 'msg_to_send') val = SendMessage(service,'me',testMessage) if __name__ == '__main__': main()

Comments

Popular posts from this blog

Lets learn "About kube proxy in iptables mode"

Lets learn "System design for paste bin (or any text sharing website)"

Lets learn "Factory design pattern"