2011-12-09 3 views
5

저는 python으로 이메일을 보내려고합니다. 여기 내 코드가있다.python smtplib로 이메일을 보내면 "보낸 사람"필드에 대해 혼동을 느낍니다.

import smtplib 

if __name__ == '__main__': 
SERVER = "localhost" 

FROM = "[email protected]" 
TO = ["[email protected]"] # must be a list 

SUBJECT = "Hello!" 

TEXT = "This message was sent with Python's smtplib." 

# 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[0], message) 
server.quit() 
print "Message sent!" 

오류없이 실행되지만 이메일은 [email protected]으로 전송되지 않습니다.

질문이 코드에 대해 이해하지 못하는

한 가지 --- FROM 필드를 설정할 때 내가 어떤 제한이 있나요?

어떻게 든 내 컴퓨터에서 온 것이라고 말할 수 있습니까?

누군가 다른 사람의 이메일을 속일 수 없도록 방지하려면 어떻게해야합니까?

아니면 자유롭게 할 수 있습니까?

+1

왜 TO [0]이 아닌가요? – sherpya

+0

아마 나는 목록에 합격하지 못했을 것이라고 생각했지만 그건 문제가 아닐 것입니다. (나는 두 가지를 시도했지만 차이를 만들지 않았다) – WillHaack

+0

sendmail의 결과를 인쇄 해 주어야한다. 빈 dict이어야하고, 또한 server.set_debuglevel (1)을 시도해야한다. – sherpya

답변

6

오류없이 실행되지만 이메일은 [email protected]으로 전송되지 않습니다.

이것은 대개 메시지가 'localhost'에서 MTA (메일 서버)로 전송되었지만이 서버가 gmail으로 릴레이 할 수 없음을 의미합니다. "[email protected]"에 바운스 메시지를 보냈을 가능성이 있습니다. 또는 메시지를 성공적으로 전송하지만 (이 날짜 헤더 누락되어 있기 때문에 메시지가 스팸 규칙을 트리거 할 수) 제한이 코드에 대해 이해하지 못하는

한 가지를 --- 무엇을 Gmail의 스팸 폴더에 상륙 FROM 필드를 설정할 때 있습니까?

는 구문 적으로 유효한 이메일 주소

어떻게 든 내 컴퓨터에서라고 말을해야합니까해야?

no. 그러나 이것이 전달되지 않은 문제 일 수 있습니다. 귀하의 컴퓨터가 집/동적/전화 접속 IP에 있습니까? gmail (및 많은 많은 다른 많은 제공 업체)은 그러한 IP로부터 메일을받지 않습니다. 메일 서버의 HELO가 잘못되었을 수 있습니다. DNS 설정이 잘못되었을 수 있습니다. 서버 로그를 확인해야합니다. 대상 서버에 직접 문의하는 대신 smarthost를 통해 메시지를 중계하도록 로컬 메일 서버를 구성해야합니다.

누군가 다른 사람의 전자 메일을 속일 수 없도록 방지하려면 어떻게해야합니까?

그래서 우리는 위조 된 주소로부터 스팸을 많이 받았습니다. SPF/DKIM과 같은 기능은 약간 도움이 될 수 있지만 SMTP 프로토콜 자체는 스푸핑으로부터 보호하지 못합니다.

아니면 자유롭게 할 수 있습니까?

기술적으로 예.

0

글쎄, 사용하고있는 이메일 서버의 종류와 설정을 정확하게 지정하지 않았기 때문에 여기에 잘못된 몇 가지 사항이 있습니다. 먼저 서버의 호스트와 포트를 지정하고 연결해야합니다. 예 :

HOST = "smtp.gmail.com" 
PORT = "587" 
SERVER = smtplib.SMTP() 
SERVER.connect(HOST, PORT) 

그런 다음 당신은 사용자와이 호스트에 자신의 암호를 지정해야합니다. 예 :

USER = "[email protected]" 
PASSWD = "123456" 

일부 서버에는 TLS 프로토콜이 필요합니다. 예 :

SERVER.starttls() 

그런 다음 로그인해야합니다. 예 :

SERVER.login(USER,PASSWD) 

만 당신은 당신 sendmail으로 이메일을 보낼 수 있습니다. 이 예제는 대부분의 일반 서버에서 잘 작동합니다. 자신의 서버를 사용하는 경우 적용해야 할 내용이별로 없습니다. 하지만이 서버에 어떤 종류의 요구 사항이 있는지 알아야합니다.

관련 문제