Come posso specificare a PHP che mail () deve essere inviato usando un server di posta esterno?

Ho la mia posta elettronica ospitata su Rackspace Email e vorrei utilizzarla come mio server di posta per il module di contatto sul mio sito web.

Guardando il file php.ini, posso solo specificare sendmail_path sui sisthemes UNIX, da cui ho letto i punti del programma che effettivamente invia la posta sul server.

Non voglio submit posta dal mio server Ubuntu poiché non ho esperienza sufficiente per creare una configuration sicura per la posta elettronica … Vorrei mail.emailsrvr.com tutto a mail.emailsrvr.com di Rackspace.

La mia domanda è, come posso specificare all'impostazione PHP sul mio server che la function mail() dovrebbe utilizzare un server di posta esterno?

mail() è destinato a consegnare a un server SMTP locale, e fa uno scarso lavoro di esso. Per il corretto supporto della posta, usa Swiftmailer o PHPMailer , entrambi i quali supportno completamente i server SMTP esterni e sono molto più facili da usare (oltre a permetterti di fare cose come messaggi misti / html, allegati, ecc …)

Poiché stavo ricercando questo problema e sono incappato in questo post e una libreria php di terze parti non era un'opzione per me.

Come sappiamo, php utilizza il command sendmail del server per impostazione predefinita L'opzione sendmail_path in php.ini può essere modificata per sovrascrivere l'impostazione al proprio command con i propri argomenti, ecc. Ad esempio: sendmail_path = /usr/bin/unix2dos | /usr/bin/dos2unix | /usr/sbin/sendmail -t -i sendmail_path = /usr/bin/unix2dos | /usr/bin/dos2unix | /usr/sbin/sendmail -t -i

SSMTP ti permetterà di indirizzare email in output a un mailhost dal tuo server web / php. https://wiki.archlinux.org/index.php/SSMTP

 apt-get install ssmtp 

Quindi puoi usare sendmail_path = /usr/sbin/ssmtp -t per dire a php di usare ssmtp invece di sendmail. Assicurati di riavviare il tuo server web dopo aver apportto modifiche a php.ini

Assicurati inoltre di aver configurato ssmtp e validationto i tuoi record SPF, DKIM, DMARC prima di apportre le modifiche a sendmail_path in php.ini

Ad esempio il server di posta di Gmail. /etc/ssmtp/ssmtp.conf

 # The user that gets all the mails (UID < 1000, usually the admin) [email protected] # The mail server (where the mail is sent to), both port 465 or 587 should be acceptable # See also http://mail.google.com/support/bin/answer.py?answer=78799 mailhub=smtp.gmail.com:587 # The address where the mail appears to come from for user authentication. rewriteDomain=yourdomain.com # The full hostname hostname=FQDN.yourdomain.com # Use SSL/TLS before starting negotiation UseTLS=Yes UseSTARTTLS=Yes # Username/Password [email protected] AuthPass=postmaster-password # Email 'From header's can override the default domain? FromLineOverride=yes 

Per una domanda di scambio dello stack per lo stesso vedere https://unix.stackexchange.com/questions/36982/can-i-set-up-system-mail-to-use-an-external-smtp-server

Per espandere su questo.

Se si utilizza Google, each From: indirizzo e-mail deve essere impostato sull'account di invio come impostazione "Account personale" in account. Altrimenti, google riscriverà le intestazioni con x-google-original-from e specificherà invece il da come account di invio.

Non correlato alla domanda, ma ci sono daemon di mailer che agiscono solo come un demone sendmail, ma si relazionano a una posta esterna.

http://freshmeat.net/projects/nullmailer/

Se non hai nemless bisogno di un'installazione exim / sendmail sul tuo computer, ti suggerisco di provarlo. Ovviamente, è comunque ansible utilizzare altre alternative di terze parti, tuttavia se si esegue un daemon localmente sarà ansible anche accodare la posta, che una php lib non può, se lo smtp di ritrasmissione non è disponibile.

Fa parte del normale repository per Debian quindi suppongo che sia vero anche per Ubuntu, solo apt-get install nullmailer deve essere sufficiente. Quindi puoi configurarlo con 1 o più relay smtp che è permesso usare.

Vedi di più qui: http://packages.ubuntu.com/oneiric/nullmailer

Come nota a margine, un sistema Linux senza un sistema di posta diventa paralizzato in molti altri modi, quindi penso che sia una buona idea in che modo.

Per coloro che non vogliono utilizzare una libreria PHP come Swiftmailer (e in ultima analisi coloro che non vogliono toccare la propria base di codice PHP solo per cambiare server SMTP), è ansible effettuare una delle seguenti operazioni:

1.) Server Windows: modifica il tuo file INI PHP per utilizzare un host relay SMTP esterno. Lo vedrai nella sezione mailer etichettata "Solo per server Windows" – o qualcosa di simile.

2.) Server Linux: Installa Postfix (servizio di inoltro e-mail) e configuralo per utilizzare un host SMTP esterno. L'installazione di PHP tenterà di utilizzare questo per submit e-mail per impostazione predefinita senza alcuna configuration aggiuntiva.

** Questo ovviamente non è inteso per fornirti dettagli passo-passo su entrambe le opzioni sopra, ma piuttosto per indirizzarti nella giusta direzione se stai cercando una soluzione che non richieda il cambio di istanze nel tuo codice where la posta di PHP ( ) è chiamato.

L'impostazione della function di posta interna per utilizzare SMTP è disponibile solo su Windows. Su altre piattaforms, PHP dovrebbe usare il drop-in sendmail o sendmail disponibile localmente.

Se si desidera utilizzare un SMTP in un server non Windows, sarà necessario utilizzare una libreria di terze parti come il mio Switfmailer preferito.

Con Swiftmailer l'invio di una email è simile a questo:

 require_once 'lib/swift_required.php'; //Create the Transport $transport = Swift_SmtpTransport::newInstance('smtp.example.org', 25) ->setUsername('your username') ->setPassword('your password') ; //Create the Mailer using your created Transport $mailer = Swift_Mailer::newInstance($transport); //Create a message $message = Swift_Message::newInstance('Wonderful Subject') ->setFrom(arrays('[email protected]' => 'John Doe')) ->setTo(arrays('[email protected]', '[email protected]' => 'A name')) ->setBody('Here is the message itself') ; //Send the message $result = $mailer->send($message); 

La function PHP predefinita 'mail ()' otterrà solo la funzionalità di base per submit un messaggio di posta elettronica. Per Rackspace, probabilmente dovrai configurare una connessione SMTP al loro server di posta. Per fare questo è meglio avere una class di mailing più avanzata e sviluppata. Diversi frameworks di codici li hanno disponibili. Se stai cercando un buon pacchetto, controlla PHP Mailer. È quasi uno standard in questi giorni.

http://phpmailer.worxware.com/

 require_once('../class.phpmailer.php'); //include("class.smtp.php"); // optional, gets called from within class.phpmailer.php if not already loaded $mail = new PHPMailer(); $body = file_get_contents('contents.html'); $body = eregi_replace("[\]",'',$body); $mail->IsSMTP(); // telling the class to use SMTP $mail->Host = "mail.yourdomain.com"; // SMTP server $mail->SMTPDebug = 2; // enables SMTP debug information (for testing) // 1 = errors and messages // 2 = messages only $mail->SMTPAuth = true; // enable SMTP authentication $mail->Host = "mail.yourdomain.com"; // sets the SMTP server $mail->Port = 26; // set the SMTP port for the GMAIL server $mail->Username = "[email protected]"; // SMTP account username $mail->Password = "yourpassword"; // SMTP account password $mail->SetFrom('[email protected]', 'First Last'); $mail->AddReplyTo("[email protected]","First Last"); $mail->Subject = "PHPMailer Test Subject via smtp, basic with authentication"; $mail->AltBody = "To view the message, please use an HTML compatible email viewer!"; // optional, comment out and test $mail->MsgHTML($body); $address = "[email protected]"; $mail->AddAddress($address, "John Doe"); $mail->AddAttachment("images/phpmailer.gif"); // attachment $mail->AddAttachment("images/phpmailer_mini.gif"); // attachment if(!$mail->Send()) { echo "Mailer Error: " . $mail->ErrorInfo; } else { echo "Message sent!"; }