Configura Postfix per inviare / inoltrare e-mail Gmail (smtp.gmail.com) tramite la porta 587


9

Utilizzando Centos 5.4, con Postfix. Posso fare un

mail foo@gmail.com 
subject: blah
 test
.
Cc:

e il messaggio viene inviato a Gmail, ma risiede nella cartella spam, che è prevedibile.

Il mio obiettivo è quello di essere in grado di generare messaggi di posta elettronica e di farli apparire nella normale Posta in arrivo! A quanto ho capito Postfix / Gmail, è possibile configurare Postfix per inviare / inoltrare la posta tramite l'utente autenticato / valido utilizzando la porta 587, che non vedrebbe più la posta come spam.

Ho provato una serie di parametri basati su diversi siti / articoli dalla 'rete, senza fortuna. Alcuni articoli sembrano effettivamente in conflitto con altri articoli! Ho anche esaminato i post di stacflow su questo, ma mi manca ancora qualcosa ... Ho anche parlato con alcune persone su IRC (Centos / Postfix) e ho ancora domande ..

Quindi, mi rivolgo di nuovo a Serverfault!

Se c'è qualcuno che è riuscito a realizzare questo, ti dispiacerebbe pubblicare il tuo main.cf, sasl-passwd e qualsiasi altro file conf che usi per farlo funzionare! Se riesco a rivedere i tuoi file di configurazione, spero di vedere dove ho sbagliato e capire come risolvere il problema.

Grazie per aver letto questo ed eventuali aiuti / suggerimenti forniti!

ps, se c'è un post di stackflow che parla di ciò che potrei aver perso, sentiti libero di segnalarmelo!

-tom

Risposte:


16

Anche se non ho provato a inoltrare tramite un provider utilizzando la porta di invio (587), dovrebbe essere possibile. Per consentire a Postfix di inoltrare, dovrai impostare un file con le credenziali autenticate da utilizzare e apportare alcune modifiche al tuo /etc/postfix/main.cffile di configurazione.

Il primo sono le credenziali di autenticazione. Per questo uso semplicemente il /etc/postfix/sasl_passwdquale aggiungo la riga appropriata usando il modello:

smtp.provider.com    smtp_user:smtp_passwd

Dovrai assicurarti che questo file sia protetto, quindi ti consiglio di impostare la root:rootproprietà e le 0600autorizzazioni. Ti consigliamo quindi di eseguire quanto segue per creare la versione mappata hash come root.

postmap hash:/etc/postfix/sasl_passwd

Con questo, sposta la tua attenzione /etc/postfix/main.cfe potresti trovare alcuni dei valori già impostati, quindi dovrai cambiarli di conseguenza, ma i dettagli importanti sono i seguenti:

smtp_sasl_auth_enable = yes
smtp_sasl_password_maps = hash:/etc/postfix/sasl_passwd
smtp_sasl_security_options =
smtp_tls_security_level = may

Ciò consentirà a Postfix di poter utilizzare il file sasl_passwd per l'autenticazione durante l'invio di posta. Dovrai quindi dire a Postfix che dovrebbe usare il provider per inviare la posta aggiungendo la configurazione

relayhost = smtp.provider.com:port

Per impostazione predefinita Postfix assume la porta 25 se non si specifica e questo ha funzionato per me in passato. Con la configurazione richiesta dovrai specificare 587 come porta. Detto questo, non sono sicuro che dovrai modificare la voce sasl_passwd in modo che non sia smtp.provider.com:587semplicemente smtp.provider.comperché non ho mai provato a farlo prima su una porta non predefinita, quindi dovrai provarlo tu stesso.

Questi soli passaggi di configurazione gestiscono l'inoltro della posta su diversi server che gestisco tramite un server di posta centrale.

Aggiornato per includere un esempio pienamente funzionante

Si è scoperto che avevo configurato il mio laptop Ubuntu (basato su Debian) per utilizzare la porta 587 sul mio provider di posta elettronica (non Gmail) poiché il mio provider DSL blocca il traffico della porta 25 in uscita. Ho aggiornato per utilizzare uno dei miei account Gmail per inviare la posta invece. L'unica modifica che dovevo fare

Sto oscurando i dati privati ma per il resto si incolla come-sta configurazione funzionante per Postfix.

Per prima cosa abbiamo /etc/postfix/main.cf:

# See /usr/share/postfix/main.cf.dist for a commented, more complete version


# Debian specific:  Specifying a file name will cause the first
# line of that file to be used as the name.  The Debian default
# is /etc/mailname.
#myorigin = /etc/mailname

smtpd_banner = $myhostname ESMTP $mail_name (Ubuntu)
biff = no

# appending .domain is the MUA's job.
append_dot_mydomain = no

# Uncomment the next line to generate "delayed mail" warnings
#delay_warning_time = 4h

readme_directory = no

# TLS parameters
#smtpd_tls_cert_file=/etc/ssl/certs/ssl-cert-snakeoil.pem
#smtpd_tls_key_file=/etc/ssl/private/ssl-cert-snakeoil.key
#smtpd_use_tls=yes
#smtpd_tls_session_cache_database = btree:${data_directory}/smtpd_scache
smtp_tls_session_cache_database = btree:${data_directory}/smtp_scache
smtp_tls_security_level = may

# See /usr/share/doc/postfix/TLS_README.gz in the postfix-doc package for
# information on enabling SSL in the smtp client.

myhostname = example.com
alias_maps = hash:/etc/aliases
alias_database = hash:/etc/aliases
mydestination = solitare, localhost.localdomain, , localhost
relayhost = smtp.gmail.com:587
mynetworks = 127.0.0.0/8 [::ffff:127.0.0.0]/104 [::1]/128
mailbox_size_limit = 0
recipient_delimiter = +
inet_interfaces = all
smtp_sasl_auth_enable = yes
smtp_sasl_password_maps = hash:/etc/postfix/sasl_passwd
smtp_sasl_security_options =

Successivamente abbiamo /etc/postfix/sasl_passwd:

smtp.gmail.com:587  myusername@gmail.com:mypassword

Ho quindi eseguito la seguente sessione SMTP:

jbouse@solitare:~$ telnet localhost 25
Trying 127.0.0.1...
Connected to solitare.
Escape character is '^]'.
220 example.com ESMTP Postfix (Ubuntu)
helo localhost
250 example.com
mail from: jbouse@example.com
250 2.1.0 Ok
rcpt to: myotherusername@gmail.com
250 2.1.5 Ok
data
354 End data with <CR><LF>.<CR><LF>
To: myotherusername@gmail.com
From: jbouse@example.com
Subject: Testing Postfix smarthost via Gmail
this is just a test
.
250 2.0.0 Ok: queued as 6269B280191
quit
221 2.0.0 Bye
Connection closed by foreign host.

Quindi accedo al mio myotherusernameaccount Gmail e leggo il messaggio:

Return-Path: <myotherusername@gmail.com>
Received: from example.com (mydslproviderhostname.net [x.x.x.229])
        by mx.google.com with ESMTPS id 6sm401663ywd.11.2010.03.04.19.19.58
        (version=TLSv1/SSLv3 cipher=RC4-MD5);
        Thu, 04 Mar 2010 19:19:58 -0800 (PST)
Sender: "Jeremy Bouse" <myotherusername@gmail.com>
Received: from localhost (solitare [127.0.0.1])
    by example.com (Postfix) with SMTP id 6269B280191
    for <myotherusername@gmail.com>; Thu,  4 Mar 2010 22:17:39 -0500 (EST)
To: myotherusername@gmail.com
From: jbouse@example.com
Subject: Testing Postfix smarthost via Gmail
Message-Id: <20100305031745.6269B280191@example.com>
Date: Thu,  4 Mar 2010 22:17:39 -0500 (EST)

this is just a test

Ora, dopo aver dimostrato che i miei 13 anni come amministratore di sistema non sono sprecati, ho l'invio di e-mail dal mio laptop tramite Gmail senza la necessità di generare un certificato x.509 autofirmato, come altri potrebbero dirti. L'aggiunta chiave a /etc/postfix/main.cfè l' impostazione smtp_tls_security_level su may per dire a Postfix che è corretto emettere il comando STARTTLS quando ci si connette a un altro MTA se supporta TLS. Se si dimentica l' impostazione smtp_tls_security_level , è possibile che venga visualizzata una voce nella propria linea /var/log/mail.loglungo le righe di:

Mar  4 22:10:58 solitare postfix/smtp[19873]: 20E07280191: to=<myotherusername@gmail.com>, relay=smtp.gmail.com[74.125.47.109]:587, delay=38, delays=38/0.03/0.08/0.01, dsn=5.7.0, status=bounced (host smtp.gmail.com[74.125.47.109] said: 530 5.7.0 Must issue a STARTTLS command first. 20sm399188ywh.48 (in reply to MAIL FROM command))

Tuttavia, se impostato correttamente, dovresti vedere qualcosa sulla falsariga di:

Mar  4 22:20:00 solitare postfix/smtp[20313]: 6269B280191: to=<myotherusername@gmail.com>, relay=smtp.gmail.com[74.125.47.109]:587, delay=141, delays=110/29/0.36/1.9, dsn=2.0.0, status=sent (250 2.0.0 OK 1267759200 6sm401663ywd.11)

Ciao Jeremy ... Grazie per la risposta. Alcune domande. Ho visto messaggi netti che hanno smtpd _... params .. Immagino di non averne bisogno. Inoltre, alcuni articoli hanno / fanno riferimento a certificati TSL. Devo occuparmene? Grazie!!
Tom Smith,

i parametri smtpd _... sono per Postfix come server ... Nel caso di inoltro a uno smarthost Postfix funziona come un client che utilizza i parametri smtp _....
Jeremy Bouse

1
gravyface, ovviamente non sai di cosa stai parlando. Ti suggerisco di leggere un po 'su SMTP e TLS / SSL / x.509 perché non hai le conoscenze in materia.
Jeremy Bouse,

1
felipe-alfaro.org/blog/2009/05/10/… ... Il secondo paragrafo fa eco ai miei commenti ...
Jeremy Bouse

1
Grazie per averlo chiarito, Jeremy. Ho sempre pensato che fosse un po 'strano che tu dovessi firmare il tuo certificato, ma nella mia fretta (e nei molti articoli / tutorial che ho visto) hanno detto tutti di farlo. Vivere e imparare.
gravyface
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.