Eu li MUITOS lugares de pessoas tentando resolver este problema e nenhum deles trabalhou para mim. Eu tenho o seguinte script
import smtplib
from email.mime.multipart import MIMEMultipart
from email.mime.text import MIMEText
msg = MIMEMultipart('alternative')
msg['Subject'] = "[Test Email]"
msg['From'] = "[email protected]"
msg['To'] = "[email protected]"
text = "sample Email"
html = "<html><body>sampleEmail</body></html>"
textPart = MIMEText(text, 'plain')
htmlPart = MIMEText(html, 'html')
msg.attach(textPart)
msg.attach(htmlPart)
s = smtplib.SMTP("localhost")
s.set_debuglevel(1)
s.sendmail("[email protected]","[email protected]", msg.as_string())
s.quit()
Quando executo o script no servidor a (chame-o de domain.com), tudo funciona conforme o esperado. Quando executo o script no servidor b (chame-o de domain.biz), recebo o Relay Access Denied. No servidor b eu tentei configurar minha própria instância de postfix para domain.biz (e não foi totalmente bem-sucedida), e algo pode estar errado com isso.
Tudo o que li diz que o servidor SMTP local não está permitindo a retransmissão para (ou de?) esse endereço. Alguém sugeriu que eu tenha certeza de que smtpd_recipient_restrictions
inclui permit_mynetworks
:
sudo postconf smtpd_recipient_restrictions
impresso:
smtpd_recipient_restrictions = permit_mynetworks, reject_unauth_destination
Isso parece bom (o problema poderia ser rejeitar_valor_destino?).
Então eles disseram que o endereço IP está incluído em mynetworks, então:
sudo postconf mynetworks
quais impressões:
mynetworks = 10.0.0.0/16, 192.168.1.0/24, 127.0.0.0/8, 55.55.55.0/24, .domain.com, .domain.biz, .ip-55-55-55-55.ip.secureserver.net
Como você pode ver, adicionei todos os domínios em que consegui pensar. (nota 55.55.55.55 não é o IP real).
A mensagem de erro diz:
python2.7 emailTest.py
send: 'ehlo localhost.localdomain\r\n'
reply: '250-domain.biz\r\n'
reply: '250-PIPELINING\r\n'
reply: '250-SIZE 10240000\r\n'
reply: '250-VRFY\r\n'
reply: '250-ETRN\r\n'
reply: '250-ENHANCEDSTATUSCODES\r\n'
reply: '250-8BITMIME\r\n'
reply: '250 DSN\r\n'
reply: retcode (250); Msg: domain.biz
PIPELINING
SIZE 10240000
VRFY
ETRN
ENHANCEDSTATUSCODES
8BITMIME
DSN
send: 'mail FROM:<[email protected]> size=565\r\n'
reply: '250 2.1.0 Ok\r\n'
reply: retcode (250); Msg: 2.1.0 Ok
send: 'rcpt TO:<[email protected]>\r\n'
reply: '554 5.7.1 <[email protected]>: Relay access denied\r\n'
reply: retcode (554); Msg: 5.7.1 <[email protected]>: Relay access denied
send: 'rset\r\n'
reply: '250 2.0.0 Ok\r\n'
reply: retcode (250); Msg: 2.0.0 Ok
Traceback (most recent call last):
File "emailTest.py", line 122, in <module>
s.sendmail("[email protected]","[email protected]", msg.as_string())
File "/usr/local/lib/python2.7/smtplib.py", line 734, in sendmail
raise SMTPRecipientsRefused(senderrs)
smtplib.SMTPRecipientsRefused: {'[email protected]': (554, '5.7.1 <[email protected]>: Relay access denied')}
Informações adicionais do main.cf:
> sudo postconf mydestination
mydestination = $myhostname, localhost.$mydomain, localhost, $mydomain, mail.$mydomain, www.$mydomain, ftp.$mydomain
> sudo postconf relay_domains
relay_domains = $mydestination
> sudo postconf mynetworks_style
mynetworks_style = subnet
> sudo postconf relayhost
relayhost =
>sudo postconf mydomain
mydomain = domain.biz
Eu também tentei:
sudo postconf relayhost
relayhost = [mail.$mydomain]
O log do postfix diz:
> sudo tail -10 /var/log/maillog
...
Jan 21 12:26:36 ip-50-62-42-49 postfix/smtpd[3875]: connect from localhost[::1]
Jan 21 12:26:36 ip-50-62-42-49 postfix/trivial-rewrite[3877]: warning: do not list domain domain.biz in BOTH mydestination and virtual_alias_domains
Jan 21 12:26:36 ip-50-62-42-49 postfix/smtpd[3875]: NOQUEUE: reject: RCPT from localhost[::1]: 554 5.7.1 <[email protected]>: Relay access denied; from=<[email protected]> to=<[email protected]> proto=ESMTP helo=<localhost.localdomain>
Jan 21 12:26:36 ip-50-62-42-49 postfix/smtpd[3875]: lost connection after RSET from localhost[::1]
Jan 21 12:26:36 ip-50-62-42-49 postfix/smtpd[3875]: disconnect from localhost[::1]
sudo postconf -n
alias_database = hash:/etc/aliases
alias_maps = hash:/etc/aliases
command_directory = /usr/sbin
config_directory = /etc/postfix
daemon_directory = /usr/libexec/postfix
data_directory = /var/lib/postfix
debug_peer_level = 1
html_directory = no
inet_interfaces = all
inet_protocols = all
mail_owner = postfix
mailq_path = /usr/bin/mailq.postfix
manpage_directory = /usr/share/man
masquerade_domains = $mydomain
mydestination = $myhostname, localhost.$mydomain, localhost, $mydomain, mail.$mydomain, www.$mydomain, ftp.$mydomain
mydomain = domain.biz
myhostname = domain.biz
mynetworks = 10.0.0.0/16, 192.168.1.0/24, 127.0.0.0/8, 55.55.55.0/24, .domain.com, .domain.biz, .ip-55-55-55-55.ip.secureserver.net
myorigin = $mydomain
newaliases_path = /usr/bin/newaliases.postfix
queue_directory = /var/spool/postfix
readme_directory = /usr/share/doc/postfix-2.6.6/README_FILES
relayhost = [mail.$mydomain]
sample_directory = /usr/share/doc/postfix-2.6.6/samples
sendmail_path = /usr/sbin/sendmail.postfix
setgid_group = postdrop
unknown_local_recipient_reject_code = 550
virtual_alias_domains = domain.biz
virtual_alias_maps = hash:/etc/postfix/virtual
Alterei os endereços IP e os endereços IP.
ATUALIZAÇÃO:
Após semanas de tentativas de trabalhar, e graças à ajuda de todos, encontrei a solução. Eu estava tentando usar localhost como o relayhost, mas como esse é um servidor hospedado por godaddy, todos os relés devem passar por um relayhost designado. Tudo o que eu precisava fazer era mudar a localização do SMTP. A linha é agora:
s = smtplib.SMTP("dedrelay.secureserver.net")