2009-04-22 12 views
24

यहाँ मेरी स्क्रिप्ट है। जीमेल की आवश्यकता के कारण लिपि स्टार्टल्ट का उपयोग करती है। मैंने इसे दो वेब होस्ट, 1and1 और वेबफैक्शन पर करने की कोशिश की है। 1and1 मुझे 'कनेक्शन से इनकार कर दिया गया' त्रुटि देता है और वेबफैक्शन रिपोर्ट में कोई त्रुटि नहीं होती है लेकिन ईमेल भेजती नहीं है। मैं स्क्रिप्ट के साथ कुछ भी गलत नहीं देख सकता, इसलिए मुझे लगता है कि यह वेब होस्ट से संबंधित हो सकता है। किसी भी विचार और टिप्पणियों की बहुत सराहना की जाएगी।smtplib और जीमेल अजगर स्क्रिप्ट समस्याओं

संपादित करें: मैंने डीबग मोड चालू कर दिया है। आउटपुट से, ऐसा लगता है कि यह संदेश सफलतापूर्वक भेजता है ... मैं इसे कभी प्राप्त नहीं करता हूं।

send: 'ehlo web65.webfaction.com\r\n' 
reply: '250-mx.google.com at your service, [174.133.21.84]\r\n' 
reply: '250-SIZE 35651584\r\n' 
reply: '250-8BITMIME\r\n' 
reply: '250-STARTTLS\r\n' 
reply: '250-ENHANCEDSTATUSCODES\r\n' 
reply: '250 PIPELINING\r\n' 
reply: retcode (250); Msg: mx.google.com at your service, [174.133.21.84] 
SIZE 35651584 
8BITMIME 
STARTTLS 
ENHANCEDSTATUSCODES 
PIPELINING 
send: 'STARTTLS\r\n' 
reply: '220 2.0.0 Ready to start TLS\r\n' 
reply: retcode (220); Msg: 2.0.0 Ready to start TLS 
send: 'ehlo web65.webfaction.com\r\n' 
reply: '250-mx.google.com at your service, [174.133.21.84]\r\n' 
reply: '250-SIZE 35651584\r\n' 
reply: '250-8BITMIME\r\n' 
reply: '250-AUTH LOGIN PLAIN\r\n' 
reply: '250-ENHANCEDSTATUSCODES\r\n' 
reply: '250 PIPELINING\r\n' 
reply: retcode (250); Msg: mx.google.com at your service, [174.133.21.84] 
SIZE 35651584 
8BITMIME 
AUTH LOGIN PLAIN 
ENHANCEDSTATUSCODES 
PIPELINING 
send: 'AUTH PLAIN *****\r\n' 
reply: '235 2.7.0 Accepted\r\n' 
reply: retcode (235); Msg: 2.7.0 Accepted 
send: 'mail FROM:<[email protected]> size=12\r\n' 
reply: '250 2.1.0 OK 4sm652580yxq.48\r\n' 
reply: retcode (250); Msg: 2.1.0 OK 4sm652580yxq.48 
send: 'rcpt TO:<[email protected]>\r\n' 
reply: '250 2.1.5 OK 4sm652580yxq.48\r\n' 
reply: retcode (250); Msg: 2.1.5 OK 4sm652580yxq.48 
send: 'data\r\n' 
reply: '354 Go ahead 4sm652580yxq.48\r\n' 
reply: retcode (354); Msg: Go ahead 4sm652580yxq.48 
data: (354, 'Go ahead 4sm652580yxq.48') 
send: 'Hello world.\r\n.\r\n' 
reply: '250 2.0.0 OK 1240421143 4sm652580yxq.48\r\n' 
reply: retcode (250); Msg: 2.0.0 OK 1240421143 4sm652580yxq.48 
data: (250, '2.0.0 OK 1240421143 4sm652580yxq.48') 
+2

इसके बजाय आप जीमेल सीधे बुलाने की अपनी सामान्य SMTP रिले के माध्यम से मेल भेज सकते हैं,। – gimel

+1

उन आउटपुट संदेशों को प्राप्त करने के लिए आप डीबग मोड कैसे चालू करते हैं? – trusktr

+3

smtplib.set_debuglevel (True) आपको सॉर्ट करेगा, @trusktr – hd1

उत्तर

7

मुझे लगता है कि जीमेल एसएमटीपी सर्वर आईपी पते कि आप कनेक्ट पर रिवर्स DNS लुकअप करता है, और कनेक्शन मना कर दिया है, तो कोई डोमेन पाया जा सकता है लगता है। यह स्पैमर को अपने एसएमटीपी सर्वर को खुले रिले के रूप में उपयोग करने से बचने के लिए है।

+4

यह आपके इंटरनेट एक्सेस प्रदाता भी हो सकता है जो उनके अलावा सर्वरों को smtp करने के लिए आउटगोइंग कनेक्शन को रोक देगा। –

+1

मुझे लगता है कि यह आईएसपी है। मैंने कोड की कोशिश की और यह मेरे लिए ठीक काम किया। – hwiechers

+35

यदि जीमेल ने रिवर्स डीएनएस लुकअप किया और कनेक्शन से इनकार कर दिया, तो मैं अपने डेस्कटॉप ईमेल क्लाइंट, जैसे थंडरबर्ड का उपयोग कैसे कर सकता हूं, जीमेल के एसएमटीपी के माध्यम से मेल भेजने के लिए? –

8

क्या आपने एक वैध संदेश बनाने का प्रयास किया है?

from email.MIMEText import MIMEText 

msg = MIMEText('body') 
msg['Subject'] = 'subject' 
msg['From'] = "..." 
msg['Reply-to'] = "..." 
msg['To'] = "..." 
2

के रूप में निश्चित ही संदेश आपके खाते में आपके खाते से भेजे गए संभवत: दिखाई देगा आप जीमेल में अपने "प्रेषित" फ़ोल्डर की जांच करने की आवश्यकता होगी।

0

मैं पतों के लिए उपर्युक्त लिंक के पास गया और था 3 अलग करने के लिए भेजने के लिए, लेकिन मैं प्राप्त एक ही पते पर तीन ईमेल और वह # 3 पता है।

http://mynthon.net/howto/-/python/python%20-%20logging.SMTPHandler-how-to-use-gmail-smtp-server.txt

import logging 
import logging.handlers 

class TlsSMTPHandler(logging.handlers.SMTPHandler): 
def emit(self, record): 
    """ 
    Emit a record. 

    Format the record and send it to the specified addressees. 
    """ 
    try: 
     import smtplib 
     import string # for tls add this line 
     try: 
      from email.utils import formatdate 
     except ImportError: 
      formatdate = self.date_time 
     port = self.mailport 
     if not port: 
      port = smtplib.SMTP_PORT 
     smtp = smtplib.SMTP(self.mailhost, port) 
     msg = self.format(record) 
     msg = "From: %s\r\nTo: %s\r\nSubject: %s\r\nDate: %s\r\n\r\n%s" % (
         self.fromaddr, 
         string.join(self.toaddrs, ","), 
         self.getSubject(record), 
         formatdate(), msg) 
     if self.username: 
      smtp.ehlo() # for tls add this line 
      smtp.starttls() # for tls add this line 
      smtp.ehlo() # for tls add this line 
      smtp.login(self.username, self.password) 
     smtp.sendmail(self.fromaddr, self.toaddrs, msg) 
     smtp.quit() 
    except (KeyboardInterrupt, SystemExit): 
     raise 
    except: 
     self.handleError(record) 

logger = logging.getLogger() 

gm = TlsSMTPHandler(("smtp.gmail.com", 587), '[email protected]', ['[email protected]', '[email protected]', '[email protected]'], 'unable to find Error!', ('[email protected]', 'mypassword')) 
gm.setLevel(logging.ERROR) 

logger.addHandler(gm) 

try: 
    1/0 
except: 
    logger.exception('It NO work for me!!-') 
6

अगर ओपी अभी भी इस जवाब की परवाह करता है मैं नहीं जानता, लेकिन अपने आप को यहाँ एक ऐसी ही समस्या का निवारण करने, उम्मीद है कि किसी और को इस उपयोगी लग सकते प्रयास में पाया था। जैसा कि यह पता चला है, Google ने अपना एसएमटीपी सर्वर इस्तेमाल करने की अनुमति दी है। आप कुछ चीजों की जांच करना चाहेंगे:

  1. कि आप उसी पते का उपयोग कर रहे हैं जिसका उपयोग आप 'से' पते के रूप में प्रमाणित करने के लिए करते थे। अगर मुझे गलत नहीं लगता है तो यह मामला होता था कि आप जो भी क्षेत्र में चाहते थे, उतना अधिक डाल सकते थे, लेकिन सुरक्षा उद्देश्यों के लिए कई एसएमटीपी होस्ट साइट्स (गूगल समेत) अब इसे उस पते पर प्रतिबंधित कर देते हैं जो उनके साथ प्रमाणित है।

  2. अपने खाते को 'कम सुरक्षित ऐप्स' द्वारा एक्सेस करने की अनुमति दें (पढ़ें: जिन ऐप्स से हम राजस्व उत्पन्न नहीं करते हैं)। अपने खाते में लॉग इन करने और यहां नेविगेट करने के लिए: https://www.google.com/settings/security/lesssecureapps

  3. टीएलएस के साथ पोर्ट 587 का उपयोग करें। वास्तव में यकीन नहीं है कि क्यों, लेकिन मुझे अच्छा खेलने के लिए पोर्ट 465 कभी नहीं मिल सका।

उम्मीद है कि यह किसी और की मदद करेगा।

+0

उत्तर, आप कहाँ गए हैं ?! –

5

यहां कुछ आत्म-प्रचार, लेकिन मुझे एक मान्य जमीन पर लगता है।

import yagmail 
yag = yagmail.SMTP('[email protected]') 
yag.send('[email protected]', subject = None, contents = 'Hello') 

या एक एक लाइनर:

तुम सचमुच ही आप वास्तव में क्या लिखा है क्या करने के लिए इस कोड की आवश्यकता होगी

yagmail.SMTP('[email protected]').send('[email protected]', None, 'Hello world.') 

क्या अच्छा है कि मैं स्टोर करने के लिए कीरिंग का उपयोग करने का प्रस्ताव है आपके पासवर्ड, इसलिए आपको अपनी स्क्रिप्ट में अपना पासवर्ड देखने वाले लोगों का जोखिम कभी नहीं होता है।

पैकेज/स्थापना के लिए कृपया दोनों अजगर 2 के लिए git या pip, उपलब्ध देखो और 3.

+0

उपरोक्त के लिए धन्यवाद, मैं वास्तव में पैकेज पर अधिक ध्यान देने की कोशिश कर रहा हूं! – PascalVKooten

+1

'SMTPAuthenticationError: कृपया अपने वेब ब्राउज़र के माध्यम से लॉग इन करें और \ n5.7.14 फिर पुन: प्रयास करें। \ N5.7.14 \ n5.7.14 https://support.google.com/mail/answer/78754 vl1sm48001045pbc.31 पर और जानें - जीएसएमटीपी ') ' –

+0

@ डेथ-स्टैकर ऐसा लगता है कि आपने अपना पासवर्ड लिखने में गलती की है? – PascalVKooten

संबंधित मुद्दे