Mit PHP Mails über einen externen Mailserver verschicken

Mit PHP Mails über einen externen Mailserver verschicken

am 06.11.2006 13:36:02 von Markus Kobligk

Hallo zusammen,

hat jemand Erfahrung/Tipps zu Bibliotheken/Anleitungen/Links zu
nützlichen Seiten zu dem im Betreff genannten Thema?

Ich muss per PHP Mails verschicken, leider läuft auf dem Server kein
Mailserver mit. Ich habe allerdings sämtliche Zugangsdaten für einen
externen Mailserver, die ich benutzen könnte, aber wie?

Grüße,
..\\arkus

Re: Mit PHP Mails über einen externen Mailserver verschicken

am 06.11.2006 15:00:07 von Sebastian Wessel

Markus Kobligk schrieb:
> Hallo zusammen,
>
> hat jemand Erfahrung/Tipps zu Bibliotheken/Anleitungen/Links zu
> nützlichen Seiten zu dem im Betreff genannten Thema?
>
> Ich muss per PHP Mails verschicken, leider läuft auf dem Server kein
> Mailserver mit. Ich habe allerdings sämtliche Zugangsdaten für einen
> externen Mailserver, die ich benutzen könnte, aber wie?

Wenn dir fsockopen zur Verfügung steht:

**********
define ("OK", 1);

function smtp_getresponse ($fp, $code)
{
while (ereg ("^$code-", ($reply = fgets ($fp, 1024))))
;

if (ereg ("^$code", $reply))
return (OK);

else
return ($reply);
}

function smtp_authorization ($fp, $username, $pass)
{
fputs ($fp, "EHLO SERVER\r\n");

if (($reply = smtp_getresponse ($fp, "250")) != OK)
return ($reply);

fputs ($fp, "AUTH LOGIN\r\n");

if (($reply = smtp_getresponse ($fp, "334")) != OK)
return ($reply);

fputs ($fp, base64_encode ($username) . "\r\n");

if (($reply = smtp_getresponse ($fp, "334")) != OK)
return ($reply);

fputs ($fp, base64_encode ($pass) . "\r\n");

if (($reply = smtp_getresponse ($fp, "235")) != OK)
return ($reply);

return (OK);
}



function mailex ($to, $subject, $message, $reply)
{
// on error the mailex function will only return false
$mail_conf['DEBUG_MODE'] = false; // true or false

// address of your email-account
$mail_conf['MAILADDR'] = '';

// address of the smtp-server
$mail_conf['SMTP_SERVER'] = '';

// port of the smtp-server
$mail_conf['SMTP_PORT'] = 25;

// if SMTP authorization is required change to true
// and enter username and password
$mail_conf['AUTH_REQUIRED'] = true;
$mail_conf['USERNAME'] = '';
$mail_conf['PASS'] = '';

$headers = 'Date: '. date("D, j M Y H:i:s") .' +0200' . "\r\n" . 'From:
'. $mail_conf['MAILADDR'] . "\r\n" . 'Reply-To: ' . $reply . "\r\n" .
'Return-path: ' . "\r\n" . 'User-Agent: Thunderbird 1.5
(Windows/20051107)' . "\r\n";

$message = str_replace("\n", "\r\n", str_replace("\r\n", "\n",
wordwrap($message, 70)));

$fp = fsockopen ($mail_conf['SMTP_SERVER'], $mail_conf['SMTP_PORT'],
$errno, $errstr, 10);

if (!$fp)
{
if ($mail_conf['DEBUG_MODE'])
echo 'Error: unable to connect to smtp-server "'. $errno .'": '.
$errstr .'
';

return (false);
}

socket_set_timeout ($fp, 10);

if (($reply = smtp_getresponse ($fp, "220")) != OK)
{
if ($mail_conf['DEBUG_MODE'])
echo 'Error: bad response from smtp-server: '. $reply;

return (false);
}

$auth_not_supported = false;
if ($mail_conf['AUTH_REQUIRED'])
{
if (($reply = smtp_authorization ($fp, $mail_conf['USERNAME'],
$mail_conf['PASS'])) != OK)
{
if (ereg ("^502", $reply) || ereg ("^501", $reply))
{
$auth_not_supported = true;

if ($mail_conf['DEBUG_MODE'])
echo 'Warning: Authorization not supported by smtp-server - trying
without authorization
';

fputs ($fp, "RSET\r\n");

if (($reply = smtp_getresponse ($fp, "250")) != OK)
{
if ($mail_conf['DEBUG_MODE'])
echo 'Error: bad response from smtp-server after RSET: '. $reply
..'
';

return (false);
}
}
else
{
if ($mail_conf['DEBUG_MODE'])
echo 'Authorization Error: '. $reply .'
';

return (false);
}
}
}

if (!$mail_conf['AUTH_REQUIRED'] || $auth_not_supported)
{
fputs ($fp, "HELO SERVER\r\n");

if (($reply = smtp_getresponse ($fp, "250")) != OK)
{
if ($mail_conf['DEBUG_MODE'])
echo 'Error: bad response from smtp-server: '. $reply .'
';

return (false);
}
}

fputs ($fp, "MAIL FROM: ". $mail_conf['MAILADDR'] ."\r\n");

if (($reply = smtp_getresponse ($fp, "250")) != OK)
{
if ($mail_conf['DEBUG_MODE'])
echo 'Error: bad response from smtp-server: '. $reply .'
';

return (false);
}

$receipient = strtok ($to, ",");

while ($receipient)
{
$receipient = trim ($receipient);

fputs ($fp, "RCPT TO: $receipient\r\n");

if (($reply = smtp_getresponse ($fp, "250")) != OK)
{
if ($mail_conf['DEBUG_MODE'])
echo 'Error: bad response from smtp-server: '. $reply .'
';

return (false);
}

$receipient = strtok (",");
}

fputs ($fp, "DATA\r\n");

if (($reply = smtp_getresponse ($fp, "354")) != OK)
{
if ($mail_conf['DEBUG_MODE'])
echo 'Error: bad response from smtp-server: '. $reply .'
';

return (false);
}

if (!ereg ("from:", $headers) && !ereg ("From:", $headers) && !ereg
("FROM:", $headers))
fputs ($fp, "From: <$MAILADDR>\r\n");

if (!ereg ("to:", $headers) && !ereg ("To:", $headers) && !ereg ("TO:",
$headers))
{
$receipient = strtok ($to, ",");

$receipient = trim ($receipient);

fputs ($fp, "To: <$receipient>");

while (($receipient = strtok (",")))
{
$receipient = trim ($receipient);

fputs ($fp, ", <$receipient>");
}

fputs ($fp, "\r\n");
}

if ($headers != "")
{
$headers = trim ($headers);

fputs ($fp, "$headers\r\n");
}

$subject = trim ($subject);
fputs ($fp, "Subject: $subject\r\n");

$message = chop ($message);
fputs ($fp, "\r\n$message");

fputs ($fp, "\r\n.\r\n");

if (($reply = smtp_getresponse ($fp, "250")) != OK)
{
if ($mail_conf['DEBUG_MODE'])
echo 'Error: bad response from smtp-server: '. $reply .'
';

return (false);
}

fputs ($fp, "QUIT\r\n");

fclose ($fp);

return (true);
}
**********

Da dürften wahrscheinlich noch ein paar Optimierungen möglich sein, aber
das Ding habe ich vor einigen Monaten mal aufgrund einer Vorlage im
Internet umgeschrieben (und damals schon verbessert) und seitdem ohne
Probleme im Betrieb.
Ganz nach dem Grundsatz "never change a running system" bin ich bisher
auch noch nicht wieder drangegangen ...

--
MfG Sebastian Wessel

"Wer Dich wegen deines Hemdes verprügelt ist nicht dein Freund."
(March Simpson)

Re: Mit PHP Mails über einen externen Mailserver verschicken

am 06.11.2006 15:20:09 von Markus Kobligk

Hallo,

Sebastian Wessel schrieb:
> Wenn dir fsockopen zur Verfügung steht:
Sollte eigentlich, auf die Konfiguration des Servers, auf dem PHP läuft,
habe ich vollen Zugriff.

> Da dürften wahrscheinlich noch ein paar Optimierungen möglich sein, aber
> das Ding habe ich vor einigen Monaten mal aufgrund einer Vorlage im
> Internet umgeschrieben (und damals schon verbessert) und seitdem ohne
> Probleme im Betrieb.
> Ganz nach dem Grundsatz "never change a running system" bin ich bisher
> auch noch nicht wieder drangegangen ...
Vielen Dank für den Code, werd es gleich mal ausprobieren.

Grüße,
..\\arkus

Re: Mit PHP Mails über einen externen Mailserver verschicken

am 06.11.2006 16:50:30 von Johannes Vogel

Hi Markus

Markus Kobligk wrote:
> hat jemand Erfahrung/Tipps zu Bibliotheken/Anleitungen/Links zu
> nützlichen Seiten zu dem im Betreff genannten Thema?
> Ich muss per PHP Mails verschicken, leider läuft auf dem Server kein
> Mailserver mit. Ich habe allerdings sämtliche Zugangsdaten für einen
> externen Mailserver, die ich benutzen könnte, aber wie?

php.ini hilft.
Lies das Kapitel Runtime configuration von Mail functions:
http://ch2.php.net/manual/en/ref.mail.php

HTH, Johannes

Re: Mit PHP Mails über einen externen Mailserver verschicken

am 06.11.2006 17:33:38 von Markus Kobligk

Hallo,

Johannes Vogel schrieb:
> php.ini hilft.
> Lies das Kapitel Runtime configuration von Mail functions:
Ich kenne dieses Kapitel ;)
Leider kann man dort meines Wissens weder einen Benutzernamen noch ein
Passwort für den zu verwendenden SMTP-Server angeben. Soweit ich weiss
kann man der mail-Funktion auch keine solchen Parameter mit auf den Weg
geben. Man möge mich bitte korrigieren, wenn ich da falsch liege.

Eine Möglichkeit wäre vielleicht noch die auf dieser Seite in den
Usercomments gepostete Variante mit dem Mail-Paket von PEAR. Diese
Variante habe ich allerdings noch nicht ausprobiert...

Grüße,
..\\arkus

Re: Mit PHP Mails über einen externen Mailserver verschicken

am 06.11.2006 18:18:42 von do.not.REMOVETHAT

Markus Kobligk schrieb:

> wie?

TCP-Verbindung herstellen, Mail per SMTP 'rüberschieben, TCP-Verbindung
trennen.

Grüße, Matthias (wo ist das Problem?)

--
http://www.trullala.de
--
Der Trend geht ganz eindeutig zur Zweitsignatur.

Re: Mit PHP Mails über einen externen Mailserver verschi

am 06.11.2006 18:45:13 von Johannes Mueller

Markus Kobligk schrieb:

> Hallo zusammen,
>
> hat jemand Erfahrung/Tipps zu Bibliotheken/Anleitungen/Links zu
> nützlichen Seiten zu dem im Betreff genannten Thema?
>
> Ich muss per PHP Mails verschicken, leider läuft auf dem Server kein
> Mailserver mit. Ich habe allerdings sämtliche Zugangsdaten für einen
> externen Mailserver, die ich benutzen könnte, aber wie?
>
> Grüße,
> .\\arkus

probier doch mal
http://phpmailer.sourceforge.net/

Grüße
Johannes

--
Emails ohne "[nospam]" im Betreff werden kommentarlos gelöscht.

Re: Mit PHP Mails übereinen externen Mailserver verschicken

am 06.11.2006 20:01:42 von Martin Lemke

Johannes Mueller schrieb:

> probier doch mal

Klingt lecker.

M.

Re: Mit PHP Mails über einen externen Mailserver verschicken

am 06.11.2006 20:18:26 von Matthias Esken

On Mon, 06 Nov 2006 13:36:02 +0100, Markus Kobligk wrote:

> Ich muss per PHP Mails verschicken, leider läuft auf dem Server kein
> Mailserver mit. Ich habe allerdings sämtliche Zugangsdaten für einen
> externen Mailserver, die ich benutzen könnte, aber wie?

Ich habe heute zum ersten Mal genau so etwas gebraucht und aus PEAR die
Mail-Klasse verwendet (http://pear.php.net/package/Mail).

Das funktioniert erstklassig mit dem SMTP-Zugriff.

Gruß,
Matthias

Re: Mit PHP Mails über einen externen Mailserver verschicken

am 07.11.2006 00:56:28 von Markus Kobligk

Hallo,

Matthias Esken schrieb:
> Ich habe heute zum ersten Mal genau so etwas gebraucht und aus PEAR die
> Mail-Klasse verwendet (http://pear.php.net/package/Mail).
> Das funktioniert erstklassig mit dem SMTP-Zugriff.

Danke für den Tipp, ich werd mir das morgen mal ansehen.

Gruß,
..\\arkus

Re: Mit PHP Mails über einen externen Mailserver verschicken

am 07.11.2006 01:02:24 von Markus Kobligk

Johannes Mueller schrieb:
> probier doch mal
> http://phpmailer.sourceforge.net/

Auch Dir vielen Dank, den PHPMailer werd ich mir morgen ebenfalls mal
ansehen.

Gruß,
..\\arkus