Python을 사용하여 프로그래밍 방식으로 이메일을 보내려고 합니다. 이메일은 메일 대기열( mailq
)에 남아 있습니다. 자세한 내용은 다음과 같습니다.
내 진단 능력은 한계에 도달했습니다. 아마도 문제는 내 ISP가 내 (동적) IP 주소에서 보낸 이메일을 차단한다는 것입니다. 어쩌면 Gmail과 Yahoo는 서로 다른 포트나 프로토콜을 기대합니다.
기술 설정:
- 데비안 4.8.4-1
- exim4 (reconfig 사용
# dpkg-reconfigure exim4-config
, 기본값으로 재설정하는 방법?) - 파이썬 2.7.9
- 데비안 PC --> 라우터 --> WAN
Python 이메일 프로그램 스크립트
#!/usr/bin/env python
import cgi
from email.MIMEImage import MIMEImage
from email.MIMEMultipart import MIMEMultipart
from email.MIMEText import MIMEText
import mimetypes
import multiprocessing
import os
import smtplib
import sys
import traceback
to_addr = "<me>@gmail.com"
from_addr = "<me>@gmail.com"
body_text = "auto email test"
message = MIMEText(body_text)
message["Subject"] = "subject"
message["From"] = from_addr
message["To"] = to_addr
message["Return-Path"] = "<>"
message["Auto-Submitted"] = "auto-generated"
smtp = smtplib.SMTP("localhost")
#smtp = smtplib.SMTP("localhost", 587)
#smtp = smtplib.SMTP("localhost", 666)
#smtp = smtplib.SMTP("localhost", 25)
try:
print("sending email")
smtp.sendmail(from_addr, [to_addr], body_text)
print("sent email")
except Exception, em:
print("ERROR: " + str(em) )
except SMTPException, em:
print("ERROR: " + str(em) )
smtp.quit()
Python 스크립트 출력(포트가 지정되지 않았거나 포트 25가 지정됨)
root@deb:/****/****/****# python emailer.py
sending email
sent email
메일 대기열에 갇힌 이메일은 다음과 같습니다.
root@deb:/****/****/****# mailq
5m 266 1aFMdt-0002d6-KW <>
<me>@gmail.com
Python 스크립트 출력(포트 587 또는 포트 666 사용) ~ 이 경우 mailq는 비어 있습니다.
root@mypc:/****/****/****# python emailer.py
Traceback (most recent call last):
File "emailer.py", line 51, in <module>
smtp = smtplib.SMTP("localhost", 666)
File "/usr/lib/python2.7/smtplib.py", line 256, in __init__
(code, msg) = self.connect(host, port)
File "/usr/lib/python2.7/smtplib.py", line 316, in connect
self.sock = self._get_socket(host, port, self.timeout)
File "/usr/lib/python2.7/smtplib.py", line 291, in _get_socket
return socket.create_connection((host, port), timeout)
File "/usr/lib/python2.7/socket.py", line 571, in create_connection
raise err
socket.error: [Errno 111] Connection refused
exim4 로그 출력( /var/log/exim4/mainlog
)
2016-01-02 08:54:49 1aFMdt-0002d6-KW <= <> H=localhost (deb.home) [127.0.0.1] P=esmtp S=266
2016-01-02 08:56:57 1aFMdt-0002d6-KW gmail-smtp-in.l.google.com [74.125.203.26] Connection timed out
2016-01-02 08:56:57 1aFMdt-0002d6-KW == <me>@gmail.com R=dnslookup T=remote_smtp defer (110): Connection timed out
답변1
다음을 수행하여 메일 릴레이에 대한 액세스 권한이 있는지 확인할 수 있습니다.
nc mailrelay 25
귀하의 ISP가 나가는 이메일 트래픽을 차단하고 있는 것으로 의심됩니다(웹에는 이미 너무 많은 스팸이 있으며 전체 이메일 트래픽의 95%로 추정됩니다).