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