2011-04-11 26 views
28

Uygulamamın bazı çıkış metinlerini bir e-postaya postalamak için çalışıyorum.Sendmail Errno [61] Bağlantı Reddedildi

import smtplib 
import sys 
import os 

SERVER = "localhost" 

FROM = os.getlogin() 
TO = [raw_input("To : ")] 

SUBJECT = "Message From " + os.getlogin() 

print "Message : (End with ^D)" 
TEXT = '' 
while 1: 
    line = sys.stdin.readline() 
    if not line: 
     break 
    TEXT = TEXT + line 

# Prepare actual message 

message = """\ 
From: %s 
To: %s 
Subject: %s 

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

# Send the mail 

server = smtplib.SMTP(SERVER) 
server.sendmail(FROM, TO, message) 
server.quit() 

Bu komut dosyası çıkışları: Gördüğünüz gibi Yani, bağlantı reddedildi ediliyor

Traceback (most recent call last): 
    File "/Users/christianlaustsen/Dropbox/Apps - Python/mail/smtplib_mail.py", line 32, in <module> 
    server = smtplib.SMTP(SERVER) 
    File "/Library/Frameworks/Python.framework/Versions/2.6/lib/python2.6/smtplib.py", line 239, in __init__ 
    (code, msg) = self.connect(host, port) 
    File "/Library/Frameworks/Python.framework/Versions/2.6/lib/python2.6/smtplib.py", line 295, in connect 
    self.sock = self._get_socket(host, port, self.timeout) 
    File "/Library/Frameworks/Python.framework/Versions/2.6/lib/python2.6/smtplib.py", line 273, in _get_socket 
    return socket.create_connection((port, host), timeout) 
    File "/Library/Frameworks/Python.framework/Versions/2.6/lib/python2.6/socket.py", line 512, in create_connection 
    raise error, msg 
error: [Errno 61] Connection refused 

basitleştirme için Senaryoyu izole ettik. Mac OS X Snow Leopard'da Python 2.6 çalıştırıyorum (eğer uygunsa).

Çok fazla arama yapmayı denedim, ancak bir çözüm bulamadı. Herhangi bir yardım takdir edilecektir.

+2

İlk adım ... kabuk ve bu işe yaramazsa 'telnet localhost 25' git, sorun SO –

+3

@MikePennington veya onlar ait değil Gabriel'in cevabını kullanabilirdi, ki bu çok yardımcı oldu. ;) – Adam

cevap

14

Tahminimce, yerel makinenizde yüklü bir SMTP sunucunuz yok.

E-postalarınız hassas değilse, bir Gmail hesabı açın ve send your emails using it with Python.

+0

Teşekkür ederim, ben sadece (smtp hakkında çok fazla bilmiyorum), ben sendmail ve os.popen ile bir posta gönderebildiğim için, bu neden farklı olurdu, ama cevabını göremedim sanırım açıklıyor:) ... Teşekkürler ... – Tehnix

10

Başlat şöyle Python ile basit SMTP sunucusu:

python -m smtpd -n -c DebuggingServer localhost:1025 
51

şöyle bir yerel sunucu başlatırsanız:

piton -m smtpd -n -c DebuggingServer localhost: 1025

:

standart dışı port numarasını kullanmak için posta gönderme kodunu değiştirmek için emin olun

server = smtplib.SMTP(SERVER, 1025) 
server.sendmail(FROM, TO, message) 
server.quit() 
3

ayrı sunucusu çalıştırmak istemiyorsanız ve yalnızca Unix kullanıyorsanız, sen http://www.yak.net/fqa/84.html gelen ve aslen Python SSS kopyalanan bu tekniği kullanabilirsiniz: Unix üzerinde

, Sendmail kullanarak çok basit. Sendmail programının yeri, sistemler arasında değişir; bazen/usr/lib/sendmail, bazen/usr/sbin/sendmail'dir. Sendmail manuel sayfası size yardımcı olacaktır. İşte bazı örnek kod:

SENDMAIL = "/usr/sbin/sendmail" # sendmail location 
import os 
p = os.popen("%s -t" % SENDMAIL, "w") 
p.write("To: [email protected]\n") 
p.write("Subject: test\n") 
p.write("\n") # blank line separating headers from body 
p.write("Some text\n") 
p.write("some more text\n") 
sts = p.close() 
if sts != 0: 
    print "Sendmail exit status", sts 
0

sisteminizde root iseniz o zaman opensmtpd yüklemek isteyebilirsiniz. İlk olarak sunucuyu manuel olarak çalıştırmanıza gerek yoktur (bu hizmet varsayılan olarak smtpd kurulumundan sonra manuel olarak başlatılır veya makinenizi yeniden başlatır). İkincisi, server = smtplib.SMTP(SERVER) hattını değiştirmeniz gerekmez. Sonuç olarak, yum install opensmtpd veya eşdeğer apt-get komutunu kullanın.

0

Sebep ne olursa olsun, sunucu ve bağlantı noktasını yapıcıya aktarmakta güçlük çektim, ancak bağlantı işlevi değil. Bu benim için çalışıyor sona erdi: hata ayıklama içinde

s = smtplib.SMTP(timeout=30) #seconds 
    s.connect(EMAIL_HOST, EMAIL_PORT) 
    m = MIMEText('see subject') 
    m['subject'] = 'sweet subject' 
    m['from'] = EMAIL_FROM 
    m['to'] = to_list # comma-separated list of emails 
    s.sendmail(m['from'], m['to'].split(','), m.as_string()) 
    s.quit() 
İlgili konular