2011-06-13 21 views
26

मैं Outlook 2003 का उपयोग कर रहा हूं।पायथन के माध्यम से आउटलुक ईमेल भेजें?

Python का उपयोग कर ईमेल भेजने के लिए सबसे अच्छा तरीका क्या है (Outlook 2003)?

+1

क्यों आप Outlook के माध्यम से ईमेल भेजने के लिए करना चाहते हैं? – ThiefMaster

+1

@ थिफमास्टर: मेरा 'smtp' सर्वर मेरे ईमेल जैसा नहीं है - इसलिए, मुझे अपने इंटरनेट प्रदाता ('att') के माध्यम से अपने smtp को' चैनल 'करने की आवश्यकता है, भले ही मैं एक अलग ईमेल पता का उपयोग कर रहा हूं (' एट्स ') ईमेल भेजने के लिए। 'Outlook' पहले से ही इसे संभालने के लिए कॉन्फ़िगर किया गया है।यदि अन्य समाधान हैं (गैर- 'दृष्टिकोण' आधारित) जो इसका भी समर्थन करेंगे, मुझे सुझाव सुनने में खुशी होगी। – user3262424

+0

उचित समाधान पायथन के [smtplib] का उपयोग कर रहा है (http://docs.python.org/library/smtplib.html#smtp-example) – ThiefMaster

उत्तर

10

उपयोग smtplib कि अजगर के साथ आता है। ध्यान दें कि इसके लिए आपके ईमेल खाते की आवश्यकता होगी smtp, जो डिफ़ॉल्ट रूप से आवश्यक रूप से सक्षम नहीं है।

SERVER = "your.mail.server" 
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() 

संपादित करें: इस उदाहरण एक और गूगल मेल

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

SUBJECT = "Hello!" 
TEXT = "This is a test of emailing through smtp in google." 

# 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() 

करने के लिए एक काल्पनिक गूगल मेल का उपयोग करता है यह वास्तव में काम करने के लिए, श्री डो जीमेल में विकल्प टैब पर जाएँ और स्थापित करने के लिए की आवश्यकता होगी यह smtp कनेक्शन की अनुमति देने के लिए। रिमोट सर्वर को प्रमाणीकृत करने के लिए लॉगिन लाइन के अतिरिक्त नोट करें। मूल संस्करण में यह शामिल नहीं है, मेरे हिस्से पर एक निरीक्षण।

+7

का उपयोग करना चाहिए, यह सवाल नहीं था। प्रश्न Outlook –

+0

@Spencer Rathbun को नियंत्रित करने के लिए Win32 API का उपयोग करने के बारे में है: धन्यवाद। समस्या यह है: मेरा 'smtp' सर्वर मेरे ईमेल जैसा नहीं है - इसलिए, मुझे अपने इंटरनेट प्रदाता ('att') के माध्यम से अपने smtp को' चैनल 'करने की आवश्यकता है, भले ही मैं एक अलग ईमेल पता का उपयोग कर रहा हूं (नहीं ईमेल भेजने के लिए 'att's')। 'Outlook' पहले से ही इसे संभालने के लिए कॉन्फ़िगर किया गया है। यदि अन्य समाधान हैं (गैर- 'दृष्टिकोण' आधारित) जो इसका भी समर्थन करेंगे, मुझे सुझाव सुनने में खुशी होगी। – user3262424

+0

@ user3262424 तो आपका ईमेल पता आपके smtp सर्वर जैसा नहीं है? यह smtp सर्वर पर संभाला जाना चाहिए। इसे उन ईमेल पर पास करने की आवश्यकता है जो उचित ईमेल सर्वर पर नहीं आते हैं। गलत तरीके से स्थापित, यह स्पैमर को आपके माध्यम से लूप करने की अनुमति देता है। लेकिन संभवतः, आप शामिल आईपी पते जानते हैं और उन्हें एक अनुमति सूची पर सेट कर सकते हैं। –

23

Google के माध्यम से जांचें, बहुत सारे उदाहरण हैं, here एक के लिए देखें।

देखने में आसानी के लिए

inlined:

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() 
+0

धन्यवाद, यह अच्छा है। समस्या यह है कि, Outlook एक 'चेतावनी संदेश' उत्पन्न करता रहता है जो मुझसे पूछता है कि क्या मैं जारी रखना चाहता हूं या वैकल्पिक रूप से, एक्सेसिंग स्क्रिप्ट को समाप्त कर सकता हूं। क्या इस 'चेतावनी संदेश' को छोड़ने का कोई तरीका है? – user3262424

+0

@ user3262424 - पॉपअप की सटीक सामग्री क्या है? –

+0

मैं अभी उस कंप्यूटर के बगल में नहीं हूं। कुछ यह सूचित करते हुए कि एक स्क्रिप्ट 'दृष्टिकोण' तक पहुंचने का प्रयास कर रही है और यह एक वायरस आदि हो सकती है और यदि मैं जारी रखना चाहता हूं। – user3262424

5

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() 
+0

धन्यवाद। क्या यह परेशान 'दृष्टिकोण' त्रुटि संदेश उत्पन्न नहीं करेगा? – user3262424

+1

यह विंडोज के नए संस्करणों पर एक सत्यापन ट्रिगर कर सकता है। सुनिश्चित नहीं है कि आप इसे कैसे दबाएंगे। मैं अब खिड़कियां नहीं चलाता हूं। –

45
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() 

भेजने के लिए अपने स्थानीय दृष्टिकोण खाते का उपयोग करेंगे।

नोट करें कि यदि आप उपरोक्त वर्णित कुछ करने की कोशिश नहीं कर रहे हैं, तो COM दस्तावेज़ गुण/विधियों को देखें: https://msdn.microsoft.com/en-us/vba/outlook-vba/articles/mailitem-object-outlook। उपरोक्त कोड में, mail एक मेलइटम ऑब्जेक्ट है।

+0

क्या यह एक एचटीएमएल शरीर के लिए संभव है।चित्रों के साथ एक ईमेल बॉडी की तरह –

+2

अद्यतन उत्तर। मेल। HTMLBody आपको इसे HTML – TheoretiCAL

+2

की एक स्ट्रिंग पर सेट करने देता है सरल और सीधा जवाब! पायथन 3.6.1 में सही ढंग से काम करना। –

0

मैं SMTPLIB का उपयोग करके ईमेल भेजना चाहता था, यह आसान है और इसे स्थानीय सेटअप की आवश्यकता नहीं है। अन्य उत्तरों के बाद सीधे मददगार नहीं थे, यही वह है जो मैंने किया था।

ब्राउज़र में ओपन आउटलुक; ऊपरी दाएं कोने पर जाएं, सेटिंग्स के लिए गियर आइकन पर क्लिक करें, दिखाई देने वाली ड्रॉप-डाउन सूची से 'विकल्प' चुनें। 'खाता' पर जाएं, 'पॉप और इंपैप' पर क्लिक करें, आपको विकल्प दिखाई देगा: "डिवाइस और ऐप्स पॉप का उपयोग करें",

हाँ विकल्प चुनें और परिवर्तन सहेजें।

यहां कोड है; जहां नेक्सेसरी संपादित करें। सबसे महत्वपूर्ण बात यह है कि यहां पीओपी और सर्वर कोड को सक्षम करना है;

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

Win32 अलावा, अगर आपकी कंपनी आपको वेब दृष्टिकोण की स्थापना की, आप भी अजगर बाकी एपीआई, जो आधिकारिक तौर पर माइक्रोसॉफ्ट द्वारा किया जाता है की कोशिश कर सकते हैं। (https://msdn.microsoft.com/en-us/office/office365/api/mail-rest-operations)

0

यह एक मैं Win32 उपयोग करने की कोशिश थी:

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() 
संबंधित मुद्दे