Frage

Ich habe viele Diskussionen über das Problem des Sendens von E-Mails von einer Amazon EC2-Instanz mithilfe der Mail-Funktion von PHP gesehen.Keiner der Vorschläge hat bei mir funktioniert.

Hier ist mein Setup:

  • Ich habe eine Ubuntu EC2-Instanz.
  • Ich habe die Schritte auf dem SES von Amazon befolgt, um Postfix mit den für mich erstellten Anmeldeinformationen zu installieren.Ich habe sowohl Stunnel- als auch direkte Methoden ausprobiert.
  • Ich habe Swiftmail Transport verwendet, um meine E-Mails entsprechend zu versenden Das.Die Transportfunktion zum Versenden einer E-Mail gibt 0 zugestellt zurück.
  • Ich habe PHP-Mail alleine verwendet und es gibt true zurück.Allerdings wird keine E-Mail zugestellt, auch nicht im Spam.

Den Produktionsservice mit SES nutze ich übrigens nicht.Die Grenzen sind für mich in Ordnung, ich möchte nur, dass es funktioniert.

Ich vermute, dass ich nicht ordnungsgemäß authentifiziert werde, und ich verstehe nicht, warum.Ich habe versucht, eine Telnet-Verbindung herzustellen ...amazonaws.com 25 und es wird eine Verbindung hergestellt.Aber als ich den Befehl Mail From ausprobiert habe:...In Telnet heißt es, dass eine Authentifizierung erforderlich ist.

Eine Alternative habe ich mir schon überlegt:sendgrid.Zu teuer für meinen Gebrauch.

Irgendwelche Gedanken?

War es hilfreich?

Lösung

So habe ich Sendgrid verwendet, um E-Mails von einer EC2-Instanz mit PHP zu senden:

  1. Eröffnen Sie ein Sendgrid-Konto.Sie erhalten einen Benutzernamen und ein Passwort, die Sie zum Versenden von E-Mails verwenden können.Außerdem überprüft Sendgrid Ihr Konto manuell (möglicherweise, um Spam zu verhindern).
  2. Installieren Sie die PHP-Curl-Bibliothek in Ubuntu: sudo apt-get install php5-curl.
  3. Verwenden Sie diesen PHP-Code, um E-Mails zu senden:

    $url = 'http://sendgrid.com/';
    $user = 'sendgrid_user';
    $pass = 'sendgrid_password'; 
    
    $params = array(
        'api_user'  => $user,
        'api_key'   => $pass,
        'to'        => $dest_addr,
        'subject'   => $subject,
        'html'      => $body,
        //'text'      => 'testing body',
        'from'      => $from_addr,
      );
    
    $request =  $url.'api/mail.send.json';
    
    $session = curl_init($request);
    // Tell curl to use HTTP POST
    curl_setopt ($session, CURLOPT_POST, true);
    // Tell curl that this is the body of the POST
    curl_setopt ($session, CURLOPT_POSTFIELDS, $params);
    // Tell curl not to return headers, but do return the response
    curl_setopt($session, CURLOPT_HEADER, false);
    curl_setopt($session, CURLOPT_RETURNTRANSFER, true);
    
    // obtain response
    $response = curl_exec($session);
    
    //If the result is {"message":"success"}, then the mail is sent.  
    curl_close($session);
    

Andere Tipps

Eine Alternative zu Postfix ist die Verwendung von „simple smtp“ (ssmtp), die eine funktionierende Funktion bietet sendmail dass andere Programme/Frameworks möglicherweise verwenden.In diesem Beispiel sendet ssmtp E-Mails über ein Gmail-Konto.

  1. Eröffnen Sie zunächst ein Gmail-Konto, falls Sie noch keins haben
  2. Stell sicher, dass du absolut nicht Es ist bereits eine App für gleichzeitige E-Mails wie xmail oder postfix installiert, sonst kommt es zu Störungen
  3. Dann installieren Sie ssmtp: sudo apt-get install ssmtp
  4. dann bearbeiten /etc/ssmtp/ssmtp.conf (siehe unten)
  5. dann bearbeiten /etc/ssmtp/revaliases (siehe unten)
  6. dann testen: echo message content | sendmail -v test@something.com
  7. (optional) Sehen Sie sich das Protokoll an, wenn es nicht funktioniert: ll /var/log/mail.* Und cat ...

Inhalt von ssmtp.conf sollte sein :(aus meinem Puppet-Modul übernommen, ersetzen Sie <%= %> Abschnitte durch Ihre Daten)

root=<%= email %>
mailhub=smtp.googlemail.com:465
AuthUser=<%= email %>
AuthPass=<%= password %>
FromLineOverride=YES
UseTLS=YES

Warnung :conf-Datei sollte Unix-EOLs haben.

Und Inhalt von Revalien sollte sein :

root:<%= email %>:smtp.googlemail.com:465

Diese Technik ist supereinfach, aber ich vermute, dass sie sich nicht skalieren lässt, wenn Sie Hunderte von E-Mails versenden müssen.

Ein weiterer ausgezeichneter Link (auf Französisch): http://doc.ubuntu-fr.org/ssmtp

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top