it-swarm.com.de

Outlook-E-Mail über Python senden?

Ich benutze Outlook 2003.

Was ist der beste Weg, um E-Mails (über Outlook 2003) mit Python zu senden?

41
user3262424

Verwenden Sie die mit Python gelieferte Smtplib. Beachten Sie, dass dazu Ihr E-Mail-Konto smtp zulässt, das standardmäßig nicht aktiviert ist.

SERVER = "smtp.example.com"
FROM = "[email protected]"
TO = ["listOfEmails"] # must be a list

SUBJECT = "Subject"
TEXT = "Your Text"

# Prepare actual message
message = """From: %s\r\nTo: %s\r\nSubject: %s\r\n\

%s
""" % (FROM, ", ".join(TO), SUBJECT, TEXT)

# Send the mail
import smtplib
server = smtplib.SMTP(SERVER)
server.sendmail(FROM, TO, message)
server.quit()

EDIT: Dieses Beispiel verwendet reservierte Domänen, wie in RFC2606 beschrieben.

SERVER = "smtp.example.com"
FROM = "[email protected]"
TO = ["[email protected]"] # must be a list

SUBJECT = "Hello!"
TEXT = "This is a test of emailing through smtp of example.com."

# Prepare actual message
message = """From: %s\r\nTo: %s\r\nSubject: %s\r\n\

%s
""" % (FROM, ", ".join(TO), SUBJECT, TEXT)

# Send the mail
import smtplib
server = smtplib.SMTP(SERVER)
server.login("MrDoe", "PASSWORD")
server.sendmail(FROM, TO, message)
server.quit()

Damit es tatsächlich mit Google Mail funktioniert, muss Herr Doe in Google Mail auf die Registerkarte "Optionen" gehen und festlegen, dass SMTP-Verbindungen zugelassen werden.

Beachten Sie das Hinzufügen der Anmeldezeile zur Authentifizierung beim Remote-Server. Die Originalversion enthält dies nicht, ein Versehen von meiner Seite.

15
Spencer Rathbun
import win32com.client as win32
Outlook = win32.Dispatch('Outlook.application')
mail = Outlook.CreateItem(0)
mail.To = 'To address'
mail.Subject = 'Message subject'
mail.Body = 'Message body'
mail.HTMLBody = '<h2>HTML Message body</h2>' #this field is optional

# To attach a file to the email (optional):
attachment  = "Path to the attachment"
mail.Attachments.Add(attachment)

mail.Send()

Verwendet Ihr lokales Outlook-Konto zum Senden.

Wenn Sie versuchen, etwas zu tun, das oben nicht erwähnt wurde, beachten Sie die Eigenschaften und Methoden von COM-Dokumenten: https://msdn.Microsoft.com/en-us/vba/Outlook-vba/articles/mailitem-object-Outlook . Im obigen Code ist mail ein MailItem-Objekt.

75
TheoretiCAL

Check via Google, es gibt viele Beispiele, siehe hier zum einen.

Inline für einfache Anzeige:

import win32com.client

def send_mail_via_com(text, subject, recipient, profilename="Outlook2003"):
    s = win32com.client.Dispatch("Mapi.Session")
    o = win32com.client.Dispatch("Outlook.Application")
    s.Logon(profilename)

    Msg = o.CreateItem(0)
    Msg.To = recipient

    Msg.CC = "moreaddresses here"
    Msg.BCC = "address"

    Msg.Subject = subject
    Msg.Body = text

    attachment1 = "Path to attachment no. 1"
    attachment2 = "Path to attachment no. 2"
    Msg.Attachments.Add(attachment1)
    Msg.Attachments.Add(attachment2)

    Msg.Send()
26
Steve Townsend

mit pywin32 :

from win32com.client import Dispatch

session = Dispatch('MAPI.session')
session.Logon('','',0,1,0,0,'exchange.foo.com\nUserName');
msg = session.Outbox.Messages.Add('Hello', 'This is a test')
msg.Recipients.Add('Corey', 'SMTP:[email protected]')
msg.Send()
session.Logoff()
6
Corey Goldberg

Die einfachste aller Lösungen für Office 365:

from O365 import Message

html_template =     """ 
            <html>
            <head>
                <title></title>
            </head>
            <body>
                    {}
            </body>
            </html>
        """

final_html_data = html_template.format(df.to_html(index=False))

o365_auth = ('[email protected]_email.com','Password')
m = Message(auth=o365_auth)
m.setRecipients('[email protected]_email.com')
m.setSubject('Weekly report')
m.setBodyHTML(final)
m.sendMessage()

hier df ist ein in html Table konvertiertes Datenframe, das in html_template injiziert wird

1
Gil Baggio

Wenn Win32 Ihr Web Outlook bereits eingerichtet hat, können Sie auch die PYTHON REST - API ausprobieren, die offiziell von Microsoft hergestellt wurde. ( https://msdn.Microsoft.com/de-de/office/office365/api/mail-rest-operations )

0
LinconFive

Ich habe es mit Win32 versucht:

import win32com.client as win32
import psutil
import os
import subprocess
import sys

# Drafting and sending email notification to senders. You can add other senders' email in the list
def send_notification():


    Outlook = win32.Dispatch('Outlook.application')
    olFormatHTML = 2
    olFormatPlain = 1
    olFormatRichText = 3
    olFormatUnspecified = 0
    olMailItem = 0x0

    newMail = Outlook.CreateItem(olMailItem)
    newMail.Subject = sys.argv[1]
    #newMail.Subject = "check"
    newMail.BodyFormat = olFormatHTML    #or olFormatRichText or olFormatPlain
    #newMail.HTMLBody = "test"
    newMail.HTMLBody = sys.argv[2]
    newMail.To = "[email protected]"
    attachment1 = sys.argv[3]
    attachment2 = sys.argv[4]
    newMail.Attachments.Add(attachment1)
    newMail.Attachments.Add(attachment2)

    newMail.display()
    # or just use this instead of .display() if you want to send immediately
    newMail.Send()





# Open Outlook.exe. Path may vary according to system config
# Please check the path to .exe file and update below
def open_Outlook():
    try:
        subprocess.call(['C:\Program Files\Microsoft Office\Office15\Outlook.exe'])
        os.system("C:\Program Files\Microsoft Office\Office15\Outlook.exe");
    except:
        print("Outlook didn't open successfully")     
#

# Checking if Outlook is already opened. If not, open Outlook.exe and send email
for item in psutil.pids():
    p = psutil.Process(item)
    if p.name() == "Outlook.EXE":
        flag = 1
        break
    else:
        flag = 0

if (flag == 1):
    send_notification()
else:
    open_Outlook()
    send_notification()
0
Buni_Buni

Ich wollte E-Mails mit SMTPLIB senden, es ist einfacher und erfordert keine lokale Einrichtung. Nachdem andere Antworten nicht direkt hilfreich waren, habe ich das gemacht.

Öffnen Sie Outlook in einem Browser. Gehe zur rechten oberen Ecke und klicke auf das Zahnradsymbol für Einstellungen. Wähle "Optionen" aus der erscheinenden Dropdown-Liste. Gehe zu "Konten" und klicke auf "Pop and Imap" : "Lassen Sie Geräte und Apps Pop verwenden",

Wählen Sie "Ja" und "Änderungen speichern".

Hier ist der Code da nach; Bearbeiten Sie dort, wo es nötig ist . Das Wichtigste ist, POP und den Servercode hier zu aktivieren.

import smtplib

body = 'Subject: Subject Here .\nDear ContactName, \n\n' + 'Email\'s BODY text' + '\nYour :: Signature/Innitials'
try:
    smtpObj = smtplib.SMTP('smtp-mail.Outlook.com', 587)
except Exception as e:
    print(e)
    smtpObj = smtplib.SMTP_SSL('smtp-mail.Outlook.com', 465)
#type(smtpObj) 
smtpObj.ehlo()
smtpObj.starttls()
smtpObj.login('[email protected]', "password") 
smtpObj.sendmail('[email protected]', '[email protected]', body) # Or [email protected]

smtpObj.quit()
pass
0
simic0de