You are not logged in.

  • Login

1

Friday, November 24th 2006, 1:13pm

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:

PHP Quellcode

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


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

2

Friday, November 24th 2006, 1:36pm

Das ist eine Angabe in der php.ini

du kannst diese aber auch aus dem Script raus verändern:

PHP Quellcode

1
ini_set('SMTP', $smtp);
wobei dann $smtp die angabe des SMTP Servers ist

bei authentifizierung:
du connectest mit fsockopen, authentifizierst dich, und schickst dann die mail raus...

ich hoffe, du kommst damit klar
Latest blogs Latest blogs: PuTTY 0.60 erschienen

3

Friday, November 24th 2006, 1:52pm

Danke für deine rasche Antwort!

komme nicht wirklich klar damit! ich binn noch php anfänger.
Aber bei deiner Antwort stellt sich mir die Frage: Was passiert wenn 2 Kunden gleichzeitig ihre Newsletter versenden wollen? Die PHP-Ini kann doch nur einen SMTP-Wert verarbeiten. Oder ist das nicht so?
Gibt es keine andere Lösung?

Gruß KMD

4

Friday, November 24th 2006, 3:38pm

Schau dir mal folgenden Link an: http://www.phpguru.org/static/mime.mail.html

5

Friday, November 24th 2006, 6:34pm

oder mein Liebling: PHPMailer
Der kann auch SMTP und wir haben ein HowTo im Repertoire: Webmailer mit PHP

6

Tuesday, November 28th 2006, 1:59pm

OK! Ich habe jetzt den PHP-Mailer eingebunden, aber ich erkenne in den Email-Headern nicht, ob die Emails über einen anderen smtp raus gingen (kein unterschiedlichen Header zur standard mail()-Funktion).

Wie kann ich das Prüfen?

Gruß KMD

7

Tuesday, November 28th 2006, 2:15pm

Also bei mir stehts im Header drinne

Source code

1
Received: by ** with SMTP


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

PHP Quellcode

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

8

Tuesday, November 28th 2006, 2:35pm

Geht der ganze Spass auch via SSL?

Also wenn ich einfach:

PHP Quellcode

1
int  $Port  =  25

auf

PHP Quellcode

1
int  $Port  =  465


abändere?

Wenn ja wäre der PHPMailer recht interessant, also ich habe den noch nie verwendet...

so long

9

Tuesday, November 28th 2006, 3:06pm

Hier mein Code-Snippet

PHP Quellcode

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


Gruß KMD

10

Tuesday, November 28th 2006, 3:10pm

Ach, hab ich vergessen...

Die Variablen für die Server-Verbindung liegen in einer config-Datei

PHP Quellcode

1
2
3
$mailserverhostname = "smtp.domain.xyz";
$mailserverusername = "xxxx";
$mailserveruserpasswort = "****";

11

Tuesday, November 28th 2006, 3:55pm

versuch den host so anzugeben:

Quoted

ssl://www.domain.tld


Hier ist beschrieben wie phpMailer und SSL bei GMail funktioniert:
http://deepakssn.blogspot.com/2006/06/gmail-php-send-email-using-php-with.html

12

Tuesday, November 28th 2006, 5:03pm

Abgesehen davon dass ich zur Mail()-Funktion bisher keinen Unterschied im Mail-Header festellen kann, kommt noch hinzu dass ich falsche SMTP-Angaben machen kann (falsches Passwort oder Falscher Benutzername), und die Emails trotzdem versendet werden. :(

Was läuft hier Falsch?

Grüße KMD

13

Tuesday, November 28th 2006, 5:10pm

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###

14

Tuesday, November 28th 2006, 5:13pm

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:

Source code

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

Dies ist ein Test von Easy-Coding.de

15

Wednesday, November 29th 2006, 8:16am

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:

Source code

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


Gruß KMD

16

Wednesday, November 29th 2006, 10:03am

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

17

Wednesday, November 29th 2006, 10:40am

Hi JFoX,

es geht bis zurm Eingabe "D: rcpt to:<user@virtual.tld>" hier erscheint die Meldung
553 sorry, that domain isn't in my list of allowed rcpthosts (#5.7.1)

Was soll mir das jetzt sagen?

Gruß KMD

18

Wednesday, November 29th 2006, 10:47am

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

19

Wednesday, November 29th 2006, 12:15pm

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

20

Wednesday, November 29th 2006, 1:48pm

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.

Similar threads

Social bookmarks