As mentioned by Cid-EL, You have to enable less secure apps in GMAIL settings
However, It's not secure to turn on that perticular option.
Gmail provides API's to perform mail operations. GMAIL API's are supported in many languages.
For Python API : Python with Gmail
For Java API's : Java with Gmail
Little more effort but you can have a secure connection !!
Step 1: Turn on the GMAIL API
Step 2: Install Google client library
pip install --upgrade google-api-python-client
Step 3: Code sample to send a mail using GMAIL API
from __future__ import print_function
import httplib2
import os
from apiclient import discovery
import oauth2client
from oauth2client import client
from oauth2client import tools
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://mail.google.com/"
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
# create a message
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'] = sender
message['subject'] = subject
return {'raw': base64.b64encode(message.as_string())}
#send message
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: %s' % message['id']
return message
except errors.HttpError, error:
print ('An error occurred: %s' % error)
def main():
"""Shows basic usage of the Gmail API.
Send a mail using gmail API
"""
credentials = get_credentials()
http = credentials.authorize(httplib2.Http())
service = discovery.build('gmail', 'v1', http=http)
msg_body = "test message"
message = CreateMessage("xxxxx@gmail.com", "yyy@gmail.com", "Status report of opened tickets", msg_body)
SendMessage(service, "me", message)
if __name__ == '__main__':
main()
Let me know if it won't work.
Hope it helps !!
与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…