0

Was ist die weit verbreitete Python 3 Gmail-Implementierung, so dass die Option "Weniger sichere Anwendungen zulassen" NICHT erforderlich ist? HierWas ist die weit verbreitete Python 3 Gmail-Implementierung, so dass die Google-Einstellung "Weniger sichere Apps zulassen" NICHT erforderlich ist?

ist die (etwas beliebt) Standard Gmail-Implementierung, die die "Weniger sichere Apps zulassen" Google Einstellung erfordert Einstellung:

import smtplib 

# Catch Exceptions - smtplib.SMTPException 

    try: 
     mail = smtplib.SMTP("smtp.gmail.com", 587) 
     mail.ehlo() 
     mail.starttls() 
     mail.ehlo() 
     mail.login(str(source_email),str(source_password)) 
     mail.sendmail(str(source_email), str(destination_email), str(email_content)) 
     mail.close() 

    except smtplib.SMTPException: 
     print("ERROR, CAN NOT SEND MAIL - smtplib.SMTPException ... ") 

""“


HINWEIS: Die Antworten, die ich Ich suche nach Codebeispielen, die dieses Sicherheitsprotokoll implementieren - https://developers.google.com/gmail/imap/xoauth2-protocol

Hier sind die Google Website Beispiele - https://github.com/google/gmail-oauth2-tools/wiki/OAuth2DotPyRunThrough


""“

Ich schätze die alle Python 3 App Gmail xoauth2-Protokoll Beispiele, die Sie geben können.

Es wäre auch hilfreich, Python 3 App E-Mail-Implementierungsbeispiele für Windows 10 Outlook-E-Mail zu haben.

+0

Ich möchte mehrere Links hinzufügen, die erklären, wie Google Mail implementieren in einer Python 3 Anwendung: (LINK # 1) - https://developers.google.com/ gmail/api/guides/sending –

+0

Ich möchte einige LINKS hinzufügen, die erklären, wie Gmail in einer Python 3-Anwendung implementiert wird: (LINK # 2) - https://developers.google.com/gmail/api/v1/ Referenz/Benutzer/Nachrichten/Senden –

+0

Ich möchte einige LINKS hinzufügen, die erklären, wie Gmail in einer Python 3-Anwendung implementiert wird: (LINK # 3) - https://developers.google.com/gmail/api/guides/ –

Antwort

0

Das folgende Codebeispiel zeigt eine MIME-Nachricht, die Codierung zu einer base64url Zeichenfolge erstellen und es auf das rohe Feld der Nachricht Ressource zuweisen:

für eine E-Mail eine Nachricht erstellen.

Args: Absender: E-Mail-Adresse des Absenders. zu: E-Mail-Adresse des Empfängers. Betreff: Der Betreff der E-Mail-Nachricht. message_text: Der Text der E-Mail-Nachricht. Rückgabewerte: Ein Objekt, das ein base64url-codiertes E-Mail-Objekt enthält.

def create_message(sender, to, subject, message_text): 
    message = MIMEText(message_text) 
    message['to'] = to 
    message['from'] = sender 
    message['subject'] = subject 
    return {'raw': base64.urlsafe_b64encode(message.as_string())} 
#
0

Erstellen von Nachrichten mit Anhängen

eine Nachricht mit einer Anlage zu schaffen, ist, wie jede andere Nachricht zu schaffen, aber der Prozess die Datei als eine mehrteilige MIME-Nachricht abhängig von der Programmiersprache Hochladen . Die folgenden Codebeispiele zeigen, wie Sie eine mehrteilige MIME-Nachricht mit einem Anhang erstellen können.

Ähnlich wie im vorherigen Beispiel wird in diesem Beispiel auch die Codierung der Nachricht an base64url und ihre Zuweisung zum Raw-Feld der Nachrichtenressource behandelt.

Erstellen Sie eine Nachricht für eine E-Mail.

Args: Absender: E-Mail-Adresse des Absenders. zu: E-Mail-Adresse des Empfängers. Betreff: Der Betreff der E-Mail-Nachricht. message_text: Der Text der E-Mail-Nachricht. Datei: Der Pfad zu der anzuhängenden Datei.

Rückgabe: Ein Objekt, das ein base64url-codiertes E-Mail-Objekt enthält.

def create_message_with_attachment(
    sender, to, subject, message_text, file): 
    message = MIMEMultipart() 
    message['to'] = to 
    message['from'] = sender 
    message['subject'] = subject 

    msg = MIMEText(message_text) 
    message.attach(msg) 

    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': 
     fp = open(file, 'rb') 
     msg = MIMEText(fp.read(), _subtype=sub_type) 
     fp.close() 
    elif main_type == 'image': 
     fp = open(file, 'rb') 
     msg = MIMEImage(fp.read(), _subtype=sub_type) 
     fp.close() 
    elif main_type == 'audio': 
     fp = open(file, 'rb') 
     msg = MIMEAudio(fp.read(), _subtype=sub_type) 
     fp.close() 
    else: 
     fp = open(file, 'rb') 
     msg = MIMEBase(main_type, sub_type) 
     msg.set_payload(fp.read()) 
     fp.close() 
    filename = os.path.basename(file) 
    msg.add_header('Content-Disposition', 'attachment', filename=filename) 
    message.attach(msg) 

    return {'raw': base64.urlsafe_b64encode(message.as_string())} 
0

Senden von Nachrichten

Nachdem Sie eine Nachricht erstellt haben, können Sie es senden, indem es in der Anfrage Körper eines Anrufs Versorgen messages.send, wie im folgenden Beispiel gezeigt.

Senden Sie eine E-Mail-Nachricht.

Args: Service: Autorisierte Gmail API Service-Instanz. user_id: E-Mail-Adresse des Benutzers. Der spezielle Wert "me" kann verwendet werden, um den authentifizierten Benutzer anzuzeigen. Nachricht: Zu sendende Nachricht.

Rückgabe: Gesendete Nachricht.

def send_message(service, user_id, 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 
0

Hier ist ein ähnliches Beispiel alle Teile kombiniert:

"""Send an email message from the user's account. 
""" 

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 


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 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 base64url encoded email object. 
    """ 
    message = MIMEText(message_text) 
    message['to'] = to 
    message['from'] = sender 
    message['subject'] = subject 
    return {'raw': base64.urlsafe_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 base64url 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.urlsafe_b64encode(message.as_string())} 
0

PYTHON 3 CODE für LERNEN GMAIL API Client Credentials:

""“ Programm: get_credentials_PYTHON3.py

Beschreibung:

Erstellt eine Google Mail-API s Service-Objekt für Google Mail Sendebereich. Running this get_credentials_PYTHON3.py Erstellt eine JSON-Datei, die für den Gmail-Sendebereich verwendet wird.

Beachten Sie, dass CM-CLIENT-1 ist der Client-Namen unter dem Sie an den Client-Namen entsprechen ändern würden Sie erstellen, wenn Ihr Projekts oauth2client Name der Einrichtung Berechtigungsnachweise zu erwerben.

Sprache: Python 3.6.2 "" "

from __future__ import print_function 
import httplib2 
import os 

from apiclient import discovery 
from oauth2client import client 
from oauth2client import tools 
from oauth2client.file import Storage 

try: 
    import argparse 
    flags = argparse.ArgumentParser(parents=[tools.argparser]).parse_args() 
except ImportError: 
    flags = None 

""" Wenn diese Bereiche zu modifizieren, löschen Sie Ihre zuvor gespeicherten Anmeldeinformationen an Pfad erstellt .... HOME_DIR.credentials.gmail-python -quickstart.json

re: SCOPES = 'https://www.googleapis.com/auth/gmail.send'

re: APPLICATION_NAME = 'CM-CLIENT-1'

012.351 „

""

SCOPES = 'https://www.googleapis.com/auth/gmail.send' 
    CLIENT_SECRET_FILE = 'client_secret.json' 
    APPLICATION_NAME = 'CM-CLIENT-1' 


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 = 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 

def main(): 
    """Shows basic usage of the Gmail API. 

    Creates a Gmail API service object for gmail send scope. 

    Running this Creates JSON File used for Gmail send scope. 
    """ 
    credentials = get_credentials() 
    http = credentials.authorize(httplib2.Http()) 
    service = discovery.build('gmail', 'v1', http=http) 


if __name__ == '__main__': 
    main() 
0

Sendet Gmail .... Python 3.6.2

Beschreibung: Sendet Gmail, das zuvor Anmeldeinformationen als GMAIL API CLIENT erworben hat.

Sendet eine E-Mail-Nachricht vom Konto des Benutzers. Mein Gmail-API-Clientname ist CM-CIENT-1 Dies ist CM_CLIENT-1 ist der Service: Eine Oauth2-Autorisierte Google Mail-API-Dienstinstanz. Sprache: Python 3.6.2

from __future__ import print_function 
import httplib2 
import os 

from apiclient import discovery 
from oauth2client import client 
from oauth2client import tools 
from oauth2client.file import Storage 

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 

SCOPES = 'https://www.googleapis.com/auth/gmail.send' 
CLIENT_SECRET_FILE = 'client_secret.json' 
APPLICATION_NAME = 'CM-CLIENT-1' 

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 = 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 


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: ' + str(message['id'])) 
     return message 
     except Exception as ex: 
     print("..... An error occurred while executing ...... SendMessage .......") 
     print(ex) 


def CreateMessage(sender, to, subject, message_text): 
     message = MIMEText(message_text) 
     message['to'] = to 
     message['from'] = sender 
     message['subject'] = subject 
     return {'raw': base64.urlsafe_b64encode(message.as_string().encode()).decode()} 


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 base64url 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.urlsafe_b64encode(message.as_string())} 



def main(): 

     try: 

      credentials = get_credentials() 
      http = credentials.authorize(httplib2.Http()) 
      service = discovery.build('gmail', 'v1', http=http) 

      # Send Gmail Message 

      SendMessage(service, "me", CreateMessage("[email protected]", 
"[email protected]", "Test Gmail Automation", "GMAIL SENT FROM APP")) 

     except Exception as e: 
      print ("ERROR !! - The Error is ..... " + str(e)) 
      raise 


if __name__ == '__main__': 
    main() 
Verwandte Themen