Angabe eines SMTP-Servers für mail()-Funktion

Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

  • Angabe eines SMTP-Servers für mail()-Funktion

    Hallo Leute,

    nach langem verzweifelten googlen wende ich mich mal wieder an euch!
    Ich möchte meinen Kunden die Möglichkeit einräumen mein Newslettersystem nutzen zu können. Aber ich möchte nicht für den Emailverkehr aufkommen. Das heist, die Kunden müssen ihre SMTP-Daten angeben um das system nutzen zu können. Wie kann ich dies realisieren?

    ich habe folgendes Snipped für den versand der Emails:

    Quellcode

    1. $header="From: $homepage <$absender>\n";
    2. $header .= "Reply-To: $absender\n";
    3. $header .= "Content-Type: text/html; charset=iso-8859-1";
    4. $i = "1";
    5. $mailfile = $mailinglist_dir."$mailfile";
    6. $db_mailingliste = file($mailfile);
    7. while (list ($line_num, $line) = each ($db_mailingliste))
    8. {
    9. $datensatz_mailingliste = explode(";;",$line);
    10. $recipsuffix = $datensatz_mailingliste[1];
    11. $recipname = $datensatz_mailingliste[2];
    12. $recipemail = $datensatz_mailingliste[3];
    13. // Email
    14. $emailmessage = "Sehr geehrte(r) ".$recipsuffix." ".$recipname.",
    15. ".$htmltext1;
    16. // Email versenden
    17. mail("$recipemail","$subject","$emailmessage","$header");
    18. $i++;
    19. }
    Alles anzeigen


    Wie kann ich die Daten (SMTP-Server, Username, Passwort) eines anderen SMTP servers in mein Script einbinden? Bin kurz vorm verzweifeln!

    Ich hoffe ihr könnt mir helfen!?

    Grüße KMD
  • Also bei mir stehts im Header drinne

    Quellcode

    1. Received: by ** with SMTP


    Zeig uns mal deinen Code. Der Code im Coderwiki ist natürlich ohne SMTP Authentifizierung.
    Hier mal einer mit:

    Quellcode

    1. require("class.phpmailer.php");
    2. $mail = new PHPMailer();
    3. $mail->From = "domain@domain.tld";
    4. $mail->FromName = "Easy Coding";
    5. $mail->Host = "www.easy-coding.de";
    6. $mail->Mailer = "smtp";
    7. $mail->IsSMTP();
    8. $mail->SMTPAuth = true;
    9. $mail->Username = "***";
    10. $mail->Password = "***";
    11. $mail->Body = 'Dies ist ein Test von Easy-Coding.de';
    12. $mail->AddAddress('recipient@domain.tld');
    13. $mail->Send();
    Alles anzeigen
  • Hier mein Code-Snippet

    Quellcode

    1. //construct message
    2. $htmltext1 = str_replace("%unsubscribelink%","<a href=\"".$scripturl."?action=5&id=".$recipid."\">".$newsletter_emailadresse_austragen."</a>",$htmltext);
    3. $htmltext1 = str_replace("%presuffix%","$presuffix",$htmltext1);
    4. $htmltext1 = str_replace("%suffix%","$recipsuffix",$htmltext1);
    5. $htmltext1 = str_replace("%name%","$recipname",$htmltext1);
    6. $emailmessagelink = $scripturl."?action=5&id=".$recipid;
    7. // Email-Inhalte fuer die Vorschau
    8. if($preview)
    9. {
    10. $htmltext1 = str_replace("%unsubscribelink%","<a href=\"#\">".$newsletter_emailadresse_austragen."</a> ".$newsletter_fuer_die_vorschau_inaktiv,$htmltext);
    11. $htmltext1 = str_replace("%presuffix%",$newsletter_sehr,$htmltext1);
    12. $htmltext1 = str_replace("%suffix%",$newsletter_geehrter,$htmltext1);
    13. $htmltext1 = str_replace("%name%",$newsletter_administrator,$htmltext1);
    14. $presuffix = $newsletter_sehr;
    15. $recipsuffix = $newsletter_geehrter;
    16. $recipname = $newsletter_administrator;
    17. $emailmessagelink = $newsletter_emailadresse_austragen." ".$newsletter_fuer_die_vorschau_inaktiv;
    18. }
    19. // Anfang NEWSLETTER //
    20. require("newsletter_emails.php");
    21. // $fusszeile_newsletter = str_replace("\n", "\n<br>", "$fusszeile_newsletter");
    22. $fusszeile_newsletter = str_replace("%unsubscribelink%",$emailmessagelink,$fusszeile_newsletter);
    23. $emailmessage = "<!--
    24. ".$presuffix." ".$recipsuffix." ".$recipname.",
    25. $message
    26. --------------------------------------------------------------------------------
    27. $fusszeile_newsletter
    28. --------------------------------------------------------------------------------
    29. $newsletter_ende_des_newsletters
    30. --------------------------------------------------------------------------------
    31. $newsletter_hinweiss_auf_html_newsletter
    32. -->
    33. ".$htmltext1;
    34. // Ende NEWSLETTER //
    35. if($preview)
    36. {
    37. $mail = new PHPMailer();
    38. $mail->IsSMTP(); // send via SMTP
    39. $mail->Host = $mailserverhostname; // SMTP servers
    40. $mail->SMTPAuth = true; // turn on SMTP authentication
    41. $mail->Username = $mailserverusername; // SMTP username
    42. $mail->Password = $mailserveruserpasswort; // SMTP password
    43. $mail->IsHTML(true); // send as HTML
    44. $mail->From = $absender; // Absender-Email-Adresse
    45. $mail->AddReplyTo($absender); // Replay-Email-Adresse
    46. $mail->AddAddress($absender);
    47. $mail->Subject = $subject;
    48. $mail->Body = $emailmessage;
    49. // mail("$absender","$subject","$emailmessage","$header");
    50. if(!$mail->Send())
    51. {
    52. echo "Warnung: Fehler beim Senden der Nachricht";
    53. ?>
    54. <br>
    55. <br><a class="Link" href="javascript:window.close();"><?php echo $link_fenster_schliessen; ?></A><br>&nbsp;
    56. </td></tr></table>
    57. <?php
    58. include ("newsletter_admin_footer.php");
    59. exit;
    60. }
    61. ?><br><br>
    62. <table border="0" cellspacing="2" cellpadding="2">
    63. <tr>
    64. <td><img src="images/check-white.jpg" width="24" height="24"></td>
    65. <td><font class="erfolgsmeldung"><?php echo $newsletter_versandmeldung_an_admin_beendet; ?> !</font></td>
    66. </tr>
    67. </table>
    68.  <br><?php echo $newsletter_versandmeldung_text; ?>.<br>
    69. <br><a class="Link" href="javascript:window.close();"><?php echo $link_fenster_schliessen; ?></A><br>&nbsp; </td></tr></table>
    70.  <table width="100%" border="0" cellpadding="2" cellspacing="2">
    71. <tr>
    72. <td bgcolor="#E9E9E9" class="border"><table border="0" cellspacing="0" cellpadding="0">
    73. <tr>
    74. <td><img src="images/newsletter_vorschau_small.jpg" width="24" height="24" hspace="5"></td>
    75. <td><strong><?php echo $header_header2; ?></strong></td>
    76. </tr>
    77. </table></td>
    78. </tr>
    79. </table><table width="100%" border="0" cellpadding="2" cellspacing="2">
    80. <tr>
    81. <td class="border" style="background-image: url(images/newsletter_vorschau_bg.jpg); background-repeat: no-repeat; background-position: right top;"><br><b><?php echo $newsletter_betreff; ?>: <?php echo $subject; ?></b><br><br>
    82. <?php echo $htmltext1; ?>
    83. <a class="Link" href="javascript:window.close();"><?php echo $link_fenster_schliessen; ?></A><br>&nbsp;</td>
    84. </tr>
    85. </table>
    86. <?php
    87. include ("newsletter_admin_footer.php");
    88. ?>
    89. <?php
    90. exit;
    91. }
    Alles anzeigen


    Gruß KMD
  • Dann hast du ein Open-Relay :), was ganz schlecht ist, es seiden du kommst vom lokalen Rechner aus,
    läuft das Skript auf deinem Mailserver? Schau mal in deine Mailserver-Config. Weiß nicht was du als Mailserver nutzt.

    Hier mal meine mailserver-Config (smtp absatz)

    Ich verwende Postfix.
    ###begin###
    smtpd_helo_required = yes
    smtpd_recipient_restrictions = permit_mynetworks, permit_sasl_authenticated, reject_unauth_destination, reject_invalid_hostname, reject_non_fqdn_hostname, check_helo_access hash:/etc/postfix/check_helo_access reject_rbl_client relays.ordb.org, reject_rbl_client list.dsbl.org, reject_rbl_client sbl-xbl.spamhaus.org, reject_rbl_client dnsbl.njabl.org check_client_access pcre:/etc/postfix/clients_check_pcre
    smtpd_sasl_auth_enable = yes #<--DAS IST WICHTIG
    smtpd_tls_cert_file = /etc/postfix/smtpd.cert
    smtpd_tls_key_file = /etc/postfix/smtpd.key
    smtpd_use_tls = yes
    ###end###
    Erst wenn der letzte FTP Server kostenpflichtig, der letzte GNU-Sourcecode verkauft, der letzte Algorithmus patentiert, der letzte Netzknoten kommerzialisiert, die letzte Newsgroup moderiert wird, werdet Ihr merken, dass man mit Geld allein nicht programmieren kann.
  • stellst du den Server selbst oder handelt es sich um einen Shared/Managed Server?
    Denn wenn dein Server ohne Authentifizierung Mails verschickt, dann ist das gar nicht gut. Man spricht von einem offenen Relay

    Andererseits ist es auch merkwüdig, dass nichts von SMTP im Header steht.
    Poste doch mal deinen Header.
    Steht denn nichtmal als X-Mailer der phpMyAdmin drinne:

    Meiner:

    Quellcode

    1. From [email]info@domain.tld[/email] Tue Nov 28 05:10:33 2006
    2. Delivered-To: [email]account@gmail.com[/email]
    3. Received: by 10.35.129.14 with SMTP id g14cs35778pyn; Tue, 28 Nov 2006
    4. 05:10:33 -0800 (PST)
    5. Received: by 10.66.244.10 with SMTP id r10mr1512090ugh.1164719433216; Tue,
    6. 28 Nov 2006 05:10:33 -0800 (PST)
    7. Return-Path: <[email]info@domain.tld[/email]>
    8. Received: from smtp.domain.tld
    9. (smtp.domain.tld [88.198.215.154]) by
    10. mx.google.com with ESMTP id 59si20467860ugf.2006.11.28.05.10.32; Tue, 28
    11. Nov 2006 05:10:33 -0800 (PST)
    12. Received-SPF: neutral (google.com: 88.198.215.154 is neither permitted nor
    13. denied by best guess record for domain of [email]info@domain.tld[/email])
    14. Received: from localhost (p57A6D45B.dip.t-dialin.net [87.166.212.91]) by
    15. smtp.domain.tld (Postfix) with ESMTP id A71A77AC02F for
    16. <[email]account@gmail.com[/email]>; Tue, 28 Nov 2006 14:11:30 +0100 (CET)
    17. Date: Tue, 28 Nov 2006 14:10:31 +0100
    18. To: [email]account@gmail.com[/email]
    19. From: MySelf <[email]info@domain.tld[/email]>
    20. Subject:
    21. Message-ID: <1981e9dc0be9d4e771839c4ca5eaf531@localhost>
    22. X-Priority: 3
    23. X-Mailer: PHPMailer [version 1.73]
    24. MIME-Version: 1.0
    25. Content-Type: text/plain; charset="iso-8859-1"
    26. Content-Transfer-Encoding: 8bit
    27. Dies ist ein Test von Easy-Coding.de
    Alles anzeigen
  • Hallo dOnUt,

    bei meinem Server handelt es sich um einen Shared/Managed-Server von Domain)Factory.

    Als X-Mailer steht PHPMailer drin und eine SMTP angabe steht auch drin, allerdings hätte ich eher smtp.meine.domain erwartet und nicht smtprelay06.ispgateway.de. Trotz allem ist es nicht akzeptabel das die Emails bei falscher angabe der SMTP-Daten weiterhin versendet werden.

    Hier mein Header:

    Quellcode

    1. Return-Path: <[email]info@domain.tld[/email]>
    2. Delivered-To: [email]info@domain.tld[/email]
    3. Received: (qmail 21824 invoked from network); 28 Nov 2006 16:53:39 -0000
    4. Received: from unknown ([80.67.18.102])by sleet.ispgateway.de (qmail-ldap-1.03) with QMQP; 28 Nov 2006 16:53:39 -0000
    5. Delivered-To: CLUSTERHOST mx23.ispgateway.de [email]info@domain.tld[/email]
    6. Received: (qmail 7139 invoked from network); 28 Nov 2006 16:53:39 -0000
    7. X-Spam-Checker-Version: SpamAssassin 3.1.3 (2006-06-01) on spamfilter05.ispgateway.de
    8. X-Spam-Level: *
    9. X-Spam-Status: No, hits=1.3 required=9999.0 tests=HTML_MESSAGE,MIME_HTML_ONLY,TRACKER_ID autolearn=disabled version=3.1.3
    10. Received: from smtprelay06.ispgateway.de ([80.67.18.44])(envelope-sender <[email]info@domain.tld[/email]>)by mx23.ispgateway.de (qmail-ldap-1.03) with SMTPfor <[email]info@domain.tld[/email]>; 28 Nov 2006 16:53:38 -0000
    11. Received: (qmail 11097 invoked from network); 28 Nov 2006 15:53:38 -0000
    12. Received: from unknown (HELO [email]info@domain.tld[/email]) ([pbs]843611@[80.67.17.79])(envelope-sender <[email]info@domain.tld[/email]>)by smtprelay06.ispgateway.de (qmail-ldap-1.03) with SMTPfor <[email]info@domain.tld[/email]>; 28 Nov 2006 15:53:38 -0000
    13. Date: Tue, 28 Nov 2006 16:53:36 +0100
    14. Return-Path: [email]info@domain.tld[/email]
    15. To: [email]info@domain.tld[/email]
    16. From: MyName <[email]info@domain.tld[/email]>
    17. Subject: Test-Mail
    18. Message-ID: <57d0ad5644fba43ea6f335012fdbf1e9@[email]info@domain.tld[/email]>
    19. X-Priority: 3
    20. X-Mailer: PHPMailer [version 1.73]
    21. MIME-Version: 1.0
    22. Content-Transfer-Encoding: 8bit
    23. Content-Type: text/html; charset="iso-8859-1"
    Alles anzeigen


    Gruß KMD
  • Hi, das deutet darauf hin, das du quasi kein "eigenen" Mailserver hast sonder nur einen Virtuelen.

    1x Mailserver verwaltet xxx Domains das nennt man das Virtualdomain. :) Das wäre natülich nur meine Vermutung, da ich das auch habe. Mit den Shared/Managed-Server kenne ich leider nicht aus, kenne nur die Root-Server heißen jetzt dedicated. So soviel dazu, checken wir mal dein Mailserver. Vergiss einfach erstmal PHPMailer, du muss nun beim Urschleim anfangen.

    Also:

    1. Bei die auf deinem Rechner zu hause eine Konsole öffnen (win/linux ist wurscht).

    Deine Eingabe (D)
    Serverantwort (A)

    D: telnet servername 25
    A: 220 myserver ESMTP Postfix (Debian/GNU)
    D: ehlo domain.tld
    A: 250-mailtest
    250-PIPELINING
    250-SIZE 10240000
    250-VRFY
    250-ETRN
    250-STARTTLS
    250-AUTH LOGIN PLAIN DIGEST-MD5 CRAM-MD5
    250-AUTH=LOGIN PLAIN DIGEST-MD5 CRAM-MD5
    250 8BITMIME
    D: mail from:<xxx@domain.tld>
    A: 250 Ok
    D: rcpt to:<user@virtual.tld>
    A: 250 OK
    D: data
    A: 354 End data with <CR><LF>.<CR><LF></LF></CR></LF></CR>
    D: This is a test email.
    . (Enter Punkt um die mail zu beenden)
    A: 250 Ok: queued as ABC1D1C123
    D: quit
    A: 221 BYE

    So wenn das so Funktioniert, kannst du gleich dein Anbieter anrufen, da du dann zu 100% ein OpenRelay hast. Sowas funktioniert NUR auf dem Mailserver direkt, Sprich wenn dein SKRIPT auf dem Mailserver läuft, brauchst du keine SMTP-AUTH, da "permit_mynetworks, " meist in der Config der Mailserver steht.

    FAZIT: PHPMailer hat damit nix zu tun.

    so long

    JFoX
    Erst wenn der letzte FTP Server kostenpflichtig, der letzte GNU-Sourcecode verkauft, der letzte Algorithmus patentiert, der letzte Netzknoten kommerzialisiert, die letzte Newsgroup moderiert wird, werdet Ihr merken, dass man mit Geld allein nicht programmieren kann.
  • Bedeutet nicht anderes, das die Domain nicht befugt ist was zu schicken (to ist ungültig).

    Naja ich hoffe doch du hast für <user@virtual.tld> was sinnvolles eingesetzt ;) , also eine gültige E-Mail Adresse (Für empfänger und Absender), dass muss schon sein, wenn die Mail dann nicht rasugeht, (mit der Fehlermeldung Relay Access Denied), ist dein Mailsserver OK. Dann führst du PHPMAILER warscheinlich auf dem Mailserver aus, wo man nicht immer ein SMTP-AUTH benötigt.

    Sag mir doch mal was bei dir in der ersten Serverantwort steht,

    A: 220 myserver ESMTP Postfix (Debian/GNU) <-- ist bei mir und bei dir?. Das würde es alles etwas erleichtern, wenn man wüsste was für ein MTA läuft.

    so long

    JFoX
    Erst wenn der letzte FTP Server kostenpflichtig, der letzte GNU-Sourcecode verkauft, der letzte Algorithmus patentiert, der letzte Netzknoten kommerzialisiert, die letzte Newsgroup moderiert wird, werdet Ihr merken, dass man mit Geld allein nicht programmieren kann.
  • Hier nochmal das was ich eingegeben habe:

    Meine Eingabe (D)
    Serverantwort (A)

    D: telnet smtp.meine.domain 25
    A: 220 smtprelay01.ispgateway.de ESMTP
    D: ehlo meine.domain (Der gleiche Domainnamen wie für den SMTP)
    A: 250-smtprelay01.ispgateway.de
    250-PIPELINING
    250-AUTH=LOGIN PLAIN
    250-AUTH LOGIN PLAIN
    250-STARTTLS
    250-SIZE 52428800
    250 8BITMIME
    D: mail from:<info@meine.domain> (Diese Email existiert auf diesem Server)
    A: 250 Ok
    D: rcpt to:<info@meine-andere.domain> (eine weitere existierende Email von mir)
    A: 553 sorry, that domain isn't in my list of allowed rcpthosts (#5.7.1)


    Gruß KMD
  • Gut Gut, dann hast du schonmal KEIN Open-Relay. Nächste Frage läuft PHPMAILER auf dem Mailserver?

    Aber um zu testen ob SMTP-AUTH via PHPMAiler funktioniert, führe PHPMAILER auf deinem Rechner aus und versuche dich mit dem MAIL-Server zu verbinden. Ich denke mal das es funktionieren wird.
    Erst wenn der letzte FTP Server kostenpflichtig, der letzte GNU-Sourcecode verkauft, der letzte Algorithmus patentiert, der letzte Netzknoten kommerzialisiert, die letzte Newsgroup moderiert wird, werdet Ihr merken, dass man mit Geld allein nicht programmieren kann.