2011-04-11 5 views
28

출력 된 텍스트를 전자 메일로 메일로 보내려는 응용 프로그램을 얻으려고했습니다.Sendmail Errno [61] 연결이 거부되었습니다

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

이 스크립트 출력 : 당신이 볼 수 그래서, 연결이 거부되고

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 

단순화를 위해 나는 스크립트를 격리했다. Mac OS X Snow Leopard에서 Python 2.6을 실행하고 있습니다 (관련성이있는 경우).

많은 검색을 시도했지만 해결 방법을 찾지 못했습니다. 어떤 도움을 주시면 감사하겠습니다.

+2

첫 번째 단계는 ... 쉘과 문제가 해결되지 않으면 유형 '텔넷 localhost를 25'로 이동, 문제는 SO –

+3

@MikePennington 또는에 속하지 않는 가브리엘 (Gabriel)의 대답을 사용할 수 있는데 이는 매우 도움이됩니다. ;) – Adam

답변

14

내 로컬 서버에 SMTP 서버가 설치되어 있지 않은 것 같습니다.

이메일이 민감하지 않은 경우 Gmail 계정과 send your emails using it with Python을 엽니 다.

+0

감사합니다. 나는 sendmail과 os.popen으로 메일을 보낼 수 있기 때문에 방금 밟은 것입니다 (smtp에 대해 많이 알지 못합니다). 왜 이것이 다른지는 알 수 없었지만 답변은 무엇입니까? 나는 그것을 추측한다 :) ... 고마워 ... – Tehnix

10

시작과 같이 파이썬으로 간단한 SMTP 서버 :

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

다음과 같이 로컬 서버를 시작하는 경우 :

파이썬 -m smtpd를 -n -c DebuggingServer 로컬 호스트 : 1025

비표준 포트 번호를 사용하도록 메일 전송 코드를 수정해야합니다.

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

별도의 서버를 실행하지 않으려면, 당신은 유닉스를 사용하는 경우, 당신은 http://www.yak.net/fqa/84.html에서, 원래 파이썬 자주 묻는 질문에서 복사 한이 기술을 사용할 수 있습니다 : 유닉스에

을, 그것은 sendmail을 사용하여 매우 간단합니다. sendmail 프로그램의 위치는 시스템마다 다릅니다. 때로는/usr/lib/sendmail, 때로는/usr/sbin/sendmail입니다. sendmail 매뉴얼 페이지가 도움이 될 것입니다. 여기에 몇 가지 예제 코드는 다음과 같습니다

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

당신이 당신의 시스템의 루트 인 경우 다음 opensmtpd를 설치할 수 있습니다. 먼저 서버를 수동으로 실행할 필요가 없습니다 (이 서비스는 기본적으로 활성화되어 있으므로 smtpd 설치 후 수동으로 시작하거나 컴퓨터를 재부팅하십시오). 둘째, server = smtplib.SMTP(SERVER) 줄을 변경할 필요가 없습니다. 결론을 내려면 yum install opensmtpd 또는 이와 동등한 apt-get 명령을 사용하십시오.

0

어떤 이유에서든 서버와 포트를 생성자에 전달하는 데 어려움이 있었지만 연결 기능은 전달하지 못했습니다. 이것은 나를 위해 일하는 결국 : 디버깅

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() 
관련 문제