Python에서 생성된 이메일이 메일 대기열에 멈춰 있는 이유는 무엇입니까?

Python에서 생성된 이메일이 메일 대기열에 멈춰 있는 이유는 무엇입니까?

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%로 추정됩니다).

관련 정보