it-swarm.com.de

SMTP-Konfiguration funktioniert nicht in der Produktion

Ich versuche, eine E-Mail zu senden, wenn ein Formular gesendet wird. Ich verwende PHPMailer, um die Mail mit der folgenden Konfiguration zu senden.

$mail = new PHPMailer;
$mail->isSMTP();
$mail->Host = 'mail.example.in'; 
$mail->Port = 25; 
$mail->SMTPAuth = true;
$mail->Username = '[email protected]'; 
$mail->Password = 'password'; 

$mail->setFrom("[email protected]" , "User");
$mail->addAddress('[email protected]', 'Receiver');
$mail->addBCC('[email protected]', 'Another user');
$mail->AddReplyTo('[email protected]', 'User');

$mail->isHTML(true);

$mail->Subject = $subject;
$mail->Body    = $message;
if($mail->send())
    echo "Your request has been received. We will soon contact you.";
else echo "Unable to send your request. Please try again";

Dies funktioniert gut in localhost. Bei der Bereitstellung auf meinem Server (example.in) erhalte ich jedoch die folgende Ausnahme.

SMTP ERROR: Failed to connect to server: Connection timed out (110)
SMTP connect() failed. https://github.com/PHPMailer/PHPMailer/wiki/Troubleshooting

--BEARBEITEN--

Ich habe versucht, eine Verbindung zum SMTP-Server mit dem Befehl telnet herzustellen, aber ich kann den Empfänger nicht hinzufügen. Ich bekomme den untenstehenden Fehler.

Last login: Fri Sep 16 11:08:06 on ttys000
admin:~ admin$ telnet mail.example.in 25
Trying 111.91.153.112...
Connected to mail.example.in.
Escape character is '^]'.
220 fbs-ho-mailserver.example.in ESMTP Service (Lotus Domino Release 8.5.3FP3) ready at Fri, 16 Sep 2016 11:36:01 +0530
HELO example.in
250 fbs-ho-mailserver.example.in Hello example.in ([111.91.127.222]), pleased to meet you
MAIL from: [email protected]
250 [email protected] Sender OK
RCPT to: [email protected]
554 Relay rejected for policy reasons.

- BEARBEITEN -

Ich konnte dieses Konto in Outlook einrichten. Ich bin wirklich verwirrt, was passiert.

 enter image description here

21
Aakash

Ihr Fehler sagt:

SMTP ERROR: Failed to connect to server: Connection timed out (110)
SMTP connect() failed. https://github.com/PHPMailer/PHPMailer/wiki/Troubleshooting

Betrachten wir also https://github.com/PHPMailer/PHPMailer/wiki/Troblem :

"SMTP-Fehler: Verbindung zum SMTP-Host konnte nicht hergestellt werden."

Dies kann auch als SMTP connect () failed oder Called Mail () angezeigt werden, ohne dass In der Debug-Ausgabe verbunden ist. Dies wird häufig als PHPMailer-Problem Gemeldet, aber es ist fast immer ein Grund für lokalen DNS-Fehler, Firewall-Blockierung (.____.) (Z. B. wie GoDaddy) oder ein anderes Problem in Ihrem lokalen Netzwerk . Dies bedeutet, dass PHPMailer keine Verbindung mit dem SMTP-Server Herstellen kann, den Sie in der Host-Eigenschaft angegeben haben. Der Grund für. Ist jedoch nicht genau angegeben. Dies kann auch dadurch verursacht werden, dass die openssl-Erweiterung nicht geladen wurde ( Siehe Verschlüsselungshinweise weiter unten).

Einige Techniken zur Diagnose der Fehlerursache werden im Folgenden Erläutert. 

Los Papa

Der beliebte Hosting-Anbieter in den USA, GoDaddy, legt dem Versand von E-Mails sehr strenge Auflagen (bis zu dem Punkt, an dem er fast nutzlos wird) vor. Sie blockieren Ausgehendes SMTP an die Ports 25, 465 und 587 an alle Server außer ihren eigenen . Dieses Problem ist das Thema vieler frustrierender Fragen zu Stack Overflow. Wenn Sie feststellen, dass Ihr Skript auf Ihrem lokalen Computer funktioniert, , Aber nicht, wenn Sie es auf GoDaddy hochladen, wird dies für Sie der Fall . Die Lösung ist äußerst schlecht von GoDaddy dokumentiert: Sie Müssen über ihre Server senden und auch alle Sicherheitsfunktionen , Den Benutzernamen und das Kennwort (großartig, huh ?!) deaktivieren, wodurch diese Konfiguration für PHPMailer:

$mail->isSMTP();
$mail->Host = 'relay-hosting.secureserver.net';
$mail->Port = 25;
$mail->SMTPAuth = false;
$mail->SMTPSecure = false;

GoDaddy weigert sich auch, mit einer Absenderadresse zu senden, die zu einer beliebigen AOL-, , Gmail-, Yahoo-, Hotmail-, Live-, Ziel- oder MSN-Domäne gehört (siehe ihre Dokumente). Dies Ist darauf zurückzuführen, dass in all diesen Domains SPF- und DKIM-Maßnahmen zur Fälschungssicherheit Eingesetzt werden, und wenn Sie Ihre Adresse falsch darstellen, handelt es sich um Fälschung.

Möglicherweise fällt es Ihnen leichter, zu einem aufgeklärteren Hostinganbieter (.____.) Zu wechseln.

3
LSerni

Das Problem - eher das zwei nicht miteinander verwandte Probleme-), die Sie haben, ist recht einfach:

SMTP-FEHLER: Verbindung zum Server fehlgeschlagen: Verbindungszeitüberschreitung (110) SMTP-Verbindung () fehlgeschlagen.

und Sie haben bestätigt, dass der Server tatsächlich Verbindungen akzeptiert:

Ich habe versucht, die Verbindung zum SMTP-Server mit dem Befehl Telnet herzustellen

Last login: Fri Sep 16 11:08:06 on ttys000
admin:~ admin$ telnet mail.example.in 25
Trying 111.91.153.112...
Connected to mail.example.in.

Ihr Skript kann keine Verbindung zum SMTP-Server herstellen, wenn es von seinem Produktionsserver ausgeführt wird.

Die wahrscheinliche Ursache ist, dass der Produktionsserver hat eine Firewall, die zur Vermeidung von Missbrauch jegliche Verbindung nach außen verhindert. Der Server kann Web-Anfragen bedienen, jedoch nicht mehr).

Wenn Ihr Test bestätigt hatte, dass Port 25 antwortete nicht, dann hätten Sie (nachdem überprüft wurde, ob die Host-Adresse korrekt war) telnet mail.example.in 587versucht. Wenn dies funktioniert hat, könnte dies der Fall sein.) bedeutet, dass der Server keine unsicheren Verbindungen (Port 25), sondern sichere Verbindungen akzeptiert. Mit PHPMailer hätten Sie dann versuchen können, die sichere Verbindung zu aktivieren:

$mail->SMTPSecure = 'tls';

oder

$mail->SMTPSecure = 'ssl';

Wenn dies nicht funktioniert, liegt möglicherweise noch ein Firewall-Problem vor. Oder Sie müssen möglicherweise phpinfo() überprüfen und überprüfen, ob OpenSSL in PHP verfügbar ist.

Was musst du machen

  • bitten Sie die IT-Mitarbeiter, die den Produktionsserver warten, die Firewall zu öffnen.
  • viel versprechender fragen Sie sie wie Sie E-Mails von diesem Server senden. Möglicherweise müssen Sie die Funktion mail() verwenden oder localhost oder 127.0.0.1 als SMTP-Server verwenden. Die E-Mails werden dann über das Servicenetzwerk Ihres Produktionsservers gesendet.

Sie können Ihnen sagen, dass Port 25 nicht zulässig ist, Port 465 oder 567 wäre jedoch zulässig. Sie müssen Ihre Konfiguration aktualisieren und/oder TLS/SSL entsprechend hinzufügen (siehe oben).

  • oder Sie können möglicherweise eine Verbindung zu einem SMTP-Server eines Drittanbieters herstellen, dessen IP-Adresse Sie angeben müssen, damit die IT-Mitarbeiter ein geeignetes Firewall-Fenster öffnen können. Dann werden die E-Mails über den Drittanbieter-Server gesendet.

Das zweite Problem (möglicherweise KEIN Problem)

250 [email protected] ... Absender OK RCPT an: [email protected] 554 Relay aus politischen Gründen abgelehnt

Um Missbrauch zu vermeiden, wird SMTP-Servernicht zulassen, dass sich jeder verbindet und E-Mails sendet, sondern nur seine eigenen Kunden. Ich sehe, dass Sie in der PHPMailer-Konfiguration einen Benutzer und ein Kennwort angegeben haben. In der Telnet-Sitzung haben Sie dies nicht getan Es könnte durchaus sein, dass PHPmailer senden kann, aber keine Verbindung, während Ihr Telnet eine Verbindung herstellen kann, aber nicht senden.

Wenn Sie das Verbindungsproblem gelöst haben, wird Ihr Authentifizierungsproblem entweder gelöst oder ist nicht mehr vorhanden (da Sie einen anderen Server verwenden, der Ihnen von den IT-Mitarbeitern bereitgestellt wird, z. B. localhost).

Das dritte Problem (vielleicht nie auftreten)

Eine dritte Möglichkeit, Dienste zu missbrauchen, ist Überbeanspruchung - das Senden zu vieler E-Mails an zu viele Personen. Erkundigen Sie sich bei den IT-Mitarbeitern, welche Richtlinien für das Versenden von E-Mails gelten.

Probleme, Probleme

Weitere Punkte sind die Glaubwürdigkeit der Quelle (möglicherweise möchten Sie E-Mails im Namen einer Domäne senden, die Ihren SMTP-Server nicht als zulässigen Absender festgelegt hat) und die Vertraulichkeit der Daten (selbst bei TLS/SSL-Verbindungen haben Sie, wenn Sie localhost als SMTP-Server erhalten, vollständigen, uneingeschränkten, nicht nachweisbaren Zugriff auf alle E-Mails, die Sie senden. Dies ist möglicherweise nicht der Fall).

2
LSerni

Es ist keine gute Idee, Ihr eigenes SMTP zu verwenden. Je nachdem, was Sie damit zu tun haben, haben Sie große Chancen, dass Ihre E-Mails auf irgendeine Weise blockiert oder als Spam markiert werden. Und Sie müssen einige Zeit verbringen, um Ihren Server auf dem neuesten Stand zu halten.

Verwenden Sie Online-Dienste, die für jeden Anbieter in einer weißen Liste aufgeführt sind und die API zum Senden Ihrer Transaktionsnachrichten bereitstellen: https://www.mailjet.com/http://mailchimp.com/ ...

Sie schlagen häufig ein kostenloses Konto für kleines Volumen vor (unter 2000 E-Mails pro Tag). Die Verwendung der API ist ziemlich trivial und kann in wenigen Minuten eingerichtet werden (zB: https: //dev.mailjet.). com/ )

1
ArGh

Ich denke, in wenigen Schritten können wir das richtig zum Laufen bringen.

  1. In Ihrem Godaddy/Hostgator Cpanel> Wählen Sie MX-Einträge> Wählen Sie die betreffende Domäne aus> Wählen Sie "Remote Mail Exchanger " aus.

    Sie können die E-Mail-Zustellung zu diesem Zeitpunkt testen. Möglicherweise wurde das Problem behoben.

  2. Ich bin sicher, es ist richtig eingerichtet, aber vertrauen Sie mir, wenn es um gutes altes Cpanel, PhpMailer und Godaddy/Hostgator geht. Es ist ein Ort, an dem der gesunde Menschenverstand keinen Sinn macht.

ersetzen:

$mail->Host = 'mail.example.in';

mit:

$mail->Host = 'localhost';

Ich glaube, dass dies alle Probleme lösen sollte, vorausgesetzt, dass Anmeldeinformationen gültig sind.

1
norcal johnny

Fragen Sie Ihren Hosting-Provider, ob SMTP auf diesem Server nicht aktiviert ist. Ich hatte zuvor das gleiche Problem mit SMTP und CurL.Contact-Hosting-Provider.

1
Akash Ganatra

1. Zitat (von IBM Community):

[email protected] war Mitglied einer Gruppe (Ablehnen), die im Feld gmail.com "Deny Messages für folgende Internetadressen " (im Domino des Zielservers) aufgeführt ist Konfiguration Des Routers/SMTP-Dokuments, Einschränkungen und Steuerungen, SMTP-Eingang Registerkarte "Steuerelemente" des Registers "Eingehende vorgesehene Empfängersteuerelemente").

Durch das Entfernen des hierarchischen Namens von Mary (Mary Jones/ABC) aus der Liste der Mitglieder Im Dokument "Ablehnen (Gruppe)" kann Mary Nachrichten Aus dem Internet empfangen.

2. Zitat:

Die meisten Mail-Server sind so konfiguriert, dass sie nicht als anonyme Spam-Relays Verwendet werden, sondern nur, um Mail von bestimmten Hosts weiterzuleiten.

1
T.Todua

Was ist die Phpmailer-Version?

Sie könnten vergessen, diese Zeile hinzuzufügen

  $mail->IsSMTP(); //  use SMTP

nachdem Sie $ mail initiiert haben.

Probieren Sie es aus.

1
HongZhen Liu

Sie haben also einen GoDaddy-Server und möchten E-Mails über Ihr neu erworbenes SMTP-Relay senden. Nun "Sie können nicht" ist wahrscheinlich das, was Sie finden werden, wenn Sie in Google herumstochern.

Wenn Sie ein wenig mehr herumstochern, werden Sie wahrscheinlich feststellen, dass die offizielle Lösung von GoDaddy darin besteht, ihr internes Mail-Relay zu verwenden. Dies ist nicht ideal, da willkürliche Barrieren wie diese gesetzt wurden:

Unsere dedizierten Server haben ein ausgehendes E-Mail-Limit von 1000 pro Tag. Wenn Sie Täglich mehr als 1000 E-Mails senden müssen, wenden Sie sich an den Kundendienst Oder öffnen Sie ein Support-Ticket, um ein höheres Limit anzufordern.

Schnelle und funktionierende Lösung: Holen Sie sich ein SMTP-Relay, das das Senden von E-Mails über die HTTP-API unterstützt.

Mein Vorschlag: (Eine einfache und effektive Arbeitslösung, die ich persönlich verwende)

Registrieren Sie sich für ein Konto in Sendgrid . Sendgrid stellt monatlich 12.000 E-Mails kostenlos zur Verfügung, und ich denke, das sollte allen Grundbedürfnissen genügen.

Erster Schritt: Sendgrid fordert Sie auf, ein paar DNS-Einträge hinzuzufügen, um Sie für das Senden von E-Mails für diesen Host zu authentifizieren. Also mach es.

Zweiter Schritt Schritt: White Lables konfigurieren https://sendgrid.com/docs/User_Guide/Settings/Whitelabel/index.html (Dies ist nicht wichtig, aber der Benutzer erhält einen professionellen Eindruck E-Mails, die Sie senden)

Dritter Schritt: API-Schlüssel generieren

Sie können Ihre API-Schlüssel verwalten vom SendGrid-Kundenportal aus. Darüber hinaus können Sie Ihre API-Schlüssel über die API selbst verwalten .

Forth Step: Schreiben Sie unsere Codes.

Das Versenden von Mails mit PHP auf sendgrid mit dieser library auf github verfügbar ist einfach:

// using SendGrid's PHP Library
// https://github.com/sendgrid/sendgrid-php
require 'vendor/autoload.php';
$sendgrid = new SendGrid("SENDGRID_APIKEY");
$email    = new SendGrid\Email();

$email->addTo("[email protected]")
      ->setFrom("[email protected]")
      ->setSubject("Sending with SendGrid is Fun")
      ->setHtml("and easy to do anywhere, even with PHP");

$sendgrid->send($email);

So funktioniert das

GoDaddy blockiert Port 25, 2525, 587 und 485, die ideale Ports für SMTP sind. Wir verwenden also den Port 80/443 und fordern die API von Sengrid auf, die E-Mail in unserem Namen über Port 80 zu senden, und ja, wir haben GoDaddy getäuscht. 

1
Sibidharan

Sie müssen einige Einstellungen in Ihrer php.ini ändern:

upload_max_filesize = 2M 
;or whatever size you want

max_execution_time = 60
; also, higher if you must - sets the maximum time in seconds.

War Ihre PHP.ini von Ihrer Umgebung abhängig, weitere Informationen: reference

ODER

Platzieren Sie dies oben in Ihr PHP-Skript und lassen Sie Ihr Skript los

ini_set('max_execution_time', 600); //600 seconds = 10 minutes or set your time
0
Dave

Ich habe dich verstanden. Dasselbe Problem tritt bei mir auf, ich habe nur eine Zeile hinzugefügt und es funktioniert für mich. benutzen Sie bitte , 

$mail->SMTPSecure = 'ssl';

und konfigurieren sie ihre einstellung gemäß ssl. Überprüfen Sie auch die E-Mail-Konfiguration an Ihrem Serveende ordnungsgemäß.

0
Vijju Pundir

Der Timeout-Fehler ist typisch für Pakete, die fallen gelassen werden. Es kann also zu Firewall-Problemen zwischen dem Webserver und dem SMTP-Server kommen. Wenn Sie über einen SSH-Zugriff auf Ihren Server verfügen, können Sie versuchen, eine Verbindung zu SMTP herzustellen:

telnet <smtp server> 25

Bei einem Timeout-Fehler, selbst bei Telnet, sind Sie ziemlich sicher, dass das Problem auf der Netzwerk-/Firewall-Seite liegt.

0
Edo