Warum ist sendmail so langsam ? PHP mail()

  • Hallo,


    Ich entwickele gerade eine Web Applikation wo man sich registrieren kann. Man bekommt nach der Registrierung dann einen Bestätigungslink per Email geschickt.
    Leider brauch das aber sehr lange und ich weiss nicht warum...


    ich habe die /etc/hosts Datei schon so umgeändert:








    p.p1 {margin: 0.0px 0.0px 0.0px 0.0px; font: 11.0px Menlo; color: #000000; background-color: #ffffff}
    span.s1 {font-variant-ligatures: no-common-ligatures}




    127.0.0.1 localhost.localdomain localhost v22016103200738692



    Kann mir jemand helfen ?


    Vielen dank

  • Ich denke da helfen dir nur die Logfiles deines Mailservers.
    Ich persönlich würde vermuten dass deine Mail aufgrunf von Greylisting oder schlechter Reputation absichtlich vom Empfänger verzögert wird.
    Machen kannst du dagegen wenig bis gar nix.


    Wieviel zu spät kommt die Mail denn? Ists dein Server oder ein Managed oder Webspace?
    Gib mal ein bisschen mehr Details :)


    Thomas

  • Ich persönlich würde vermuten dass deine Mail aufgrunf von Greylisting oder schlechter Reputation absichtlich vom Empfänger verzögert wird.


    Mein Greylister hinterlässt einen Header im Mail:

    Code
    X-Greylist: delayed 00:15:02 by SQLgrey-1.8.0


    Generell wären auch die anderen Header der verzögerten Mail hilfreich bei der Fehlersuche.

    CentOS 7 / nginx / php-fpm / postfix / rspamd / clamav / dovecot / nextcloud running on RS 1000 SSDx4 G8 / VPS 500 G8 / VPS 2000 G8 Plus

  • Danke für die Antwort!


    Also es ist ein Root-Server von Netcup.


    Also hier die /var/log/mail.log:


    Apr 24 09:09:01 v22016103200738692 sendmail[2413]: v3O7913W002413: from=root, size=155874, class=0, nrcpts=1, msgid=<201704240709.v3O7913W002413@localhost.localdomain>, bodytype=8BITMIME, relay=root@localhost
    Apr 24 09:09:01 v22016103200738692 sm-mta[2414]: v3O791q2002414: from=<root@localhost.localdomain>, size=156162, class=0, nrcpts=1, msgid=<201704240709.v3O7913W002413@localhost.localdomain>, bodytype=7BIT, proto=ESMTP, daemon=MTA-v4, relay=localhost.localdomain [127.0.0.1]
    Apr 24 09:09:01 v22016103200738692 sendmail[2413]: v3O7913W002413: to=root, ctladdr=root (0/0), delay=00:00:00, xdelay=00:00:00, mailer=relay, pri=185874, relay=[127.0.0.1] [127.0.0.1], dsn=2.0.0, stat=Sent (v3O791q2002414 Message accepted for delivery)
    Apr 24 09:09:01 v22016103200738692 sm-mta[2415]: v3O791q2002414: to=netcup, ctladdr=<root@localhost.localdomain> (8/0), delay=00:00:00, mailer=local, pri=276162, dsn=5.1.1, stat=User unknown
    Apr 24 09:09:01 v22016103200738692 sm-mta[2415]: v3O791q2002414: to=netcup, ctladdr=<root@localhost.localdomain> (8/0), delay=00:00:00, mailer=local, pri=186408, dsn=5.1.1, stat=User unknown
    Apr 24 09:09:01 v22016103200738692 sm-mta[2415]: v3O791q2002414: to=netcup, ctladdr=root (8/0), delay=00:00:00, mailer=local, pri=186408, dsn=5.1.1, stat=User unknown
    Apr 24 09:09:01 v22016103200738692 sm-mta[2415]: v3O791q2002414: v3O791q2002415: postmaster notify: User unknown
    Apr 24 09:09:01 v22016103200738692 sm-mta[2415]: v3O791q2002415: to=netcup, ctladdr=root (8/0), delay=00:00:00, mailer=local, pri=0, dsn=5.1.1, stat=User unknown
    Apr 24 09:09:01 v22016103200738692 sm-mta[2415]: v3O791q2002415: to=netcup, ctladdr=root (8/0), delay=00:00:00, mailer=local, pri=0, dsn=5.1.1, stat=User unknown
    Apr 24 09:09:01 v22016103200738692 sm-mta[2415]: v3O791q2002415: v3O791q3002415: return to sender: User unknown
    Apr 24 09:09:01 v22016103200738692 sm-mta[2415]: v3O791q3002415: to=netcup, ctladdr=root (8/0), delay=00:00:00, mailer=local, pri=0, dsn=5.1.1, stat=User unknown
    Apr 24 09:09:01 v22016103200738692 sm-mta[2415]: v3O791q2002415: Saved message in /var/lib/sendmail/dead.letter

  • Meine /etc/hosts Datei sieht folgendermaßen aus:


    127.0.0.1 localhost.localdomain localhost v22016103200738692
    127.0.1.1 kvmimageinstall.yourvserver.net kvmimageinstall


    # The following lines are desirable for IPv6 capable hosts
    ::1 localhost ip6-localhost ip6-loopback
    ff02::1 ip6-allnodes
    ff02::2 ip6-allrouters
    188.68.55.50 v22016103200738692.hotsrv.de v22016103200738692

  • Also hier die /var/log/mail.log:



    Ich glaube nicht, dass dieser Log-Ausschnitt etwas mit der verzögerten Zustellung zu tun hat.
    Da kommt ein Mail von root an root, welches durch einen Mailalias an den lokalen Benutzer "netcup" weitergeleitet wird, den es aber gar nicht gibt. Darum wird die Nachricht in /var/lib/sendmail/dead.letter abgespeichert.


    Ist die Email-Adresse, an die die Mail gesendet werden soll, auf dem gleichen Root Server angelegt (d.h. Mailserver und Webserver sind eins), oder ist das ein anderer Mail Provider?
    Wird die Email von der Webapp lokal versendet oder über SMTP mit login?

    CentOS 7 / nginx / php-fpm / postfix / rspamd / clamav / dovecot / nextcloud running on RS 1000 SSDx4 G8 / VPS 500 G8 / VPS 2000 G8 Plus

  • Also imho wurde die Mail an root sofort zugestellt (09:09:01) die Mail an netcup wurde garnicht zugestellt weil es den User 'netcup' auf dem System nicht gibt.
    Das sind hier aber wohl lokale Mail Zustellungen, würde mich wundern wenn die Länger als 2 Sekunden dauern.


    Wie lange dauern sie denn nun? Woher weißt du das?
    Wie sieht dein Script aus?
    Wir prüfst du die Zeit?

  • Also in dem mail.log steht etwas anderes, da wird die Mail an Lokal gesendet und den Nutzer gibt es nicht. Und Du hast geschrieben, dass Du mit sendmail arbeitest, also sehr wahrscheinlich nichts mit SMTP. Aber es wäre hilfreich es etwas genauer zu beschreiben. Aber so wie ich das sehe, würde ich die hosts und wahrscheinlich die gesamte Mailkonfiguration ersteinmal sauber aufsetzen.

  • Also der Benutzer der sich registriert wird ja in meiner MySQL Datenbank abgespeichert mit dem Registrierdatum und dann schaue ich die Zeit wenn ich die Mail erhalte.


    Hier das PHP Skript:


    public function sendActivationMail($firstName, $surName, $email, $activationCode){
    $message = "Dear ".$firstName." ".$surName.", \n\nPlease activate your account by verifying your email. To do so, click on the following link: \n";
    $message .= "https://" . $_SERVER['SERVER_NAME'] . "/index.php?action=activation&code=" . $activationCode;
    $message .= "\n\nThank you and enjoy your stay!";


    $to = $email;
    $subject = "bSupport - Account activation";
    $txt = $message;
    $headers = "From: bSupport@bbrinck.eu" . "\r\n";


    mail($to,$subject,$txt,$headers);
    }

  • So wie ich sagte sendmail. Aber von der Domain ist nichts in der hosts zu sehen, auch ist das Script sehr gut dafür geeignet fremde Enpfänger mit Mails zu nerven, da dieses in der jetzigen Form keinerlei logische Prüfungen enthält.


    Sorry, aber da gibt es nicht nur ein Turorial, da gehört mehr dazu, aber ein Anfang stellt das WiKi von netcup dar und was auch immer gut ist, sind die Bücher über Postfix etc..

  • Nur als Beispiel zum Script: Du hast ja einen activation code und da wäre es gut, wenn Du prüfst ob die E-Mail schon eingetragen wurde wenn diese noch nicht aktiviert ist. Denn was hindert den jemanden die E-Mail hundert mal hintereinander einzutragen?

  • Am besten schickst Du die Mail über Postfix mittels SMTP (wobei ich mir selber keine E-Mail schicken würde) und nicht über Sendmail. Auch würde ich den [Server Name] fest setzen, den die Adresse hast Du dich permanent oder ändert die sich laufend?