Kurze einleitende Zusammenfassung des Themas:
Ein auf php basierendes Kontaktformular, das Emails mittels der php-Funktion mail() an mich versendet, soll auf Versand über smpt umgestellt werden. Und: ich bin kein erfahrener php-Nutzer, sondern mehr eine Art "script-kiddie", d.h. ich suche mir die guten Sachen raus und mixe die dann Zusammen...
Ich nutze schon seit einigen Jahren das auf dem einfachem Perl-Formailer (Universal-Formmailer) von Stefan Münz basierenden php-Formmailer (Form Email) von Patrick Canterino (-> patshaping.de). Dies mag evtl. nicht mehr so modern sein, aber ich habe ihn in mühseliger Handarbeit immer mehr erweitert und für meine Bedürfnisse angepasst, so daß mittlerweile fast nur noch einige Grundfunktionen dem Ursprungs-Code gleichen. Ich finde den Formmailer auch wirklich gut, er muß sich auch heute nicht hinter anderen, moderneren Formular Mailern verstecken: Captcha-Funktion, Bestätigungs-Ausgabe Seite nach Versand, schöne Aufbearbeitung in der Email, usw., usw. (ein Umstieg auf phpmailer.worxware.com habe ich nach Anfangsschwierigkeiten aufgegeben, zumal lange nicht so umfangreich m.M. nach).
Langer Reder kurzer Sinn: seit einem Server Umzug kann ich leider nicht mehr auf die php-Funktion mail() zugreifen. Das ist leider so, und eine Diskussion hierüber ist unnötig.... ;-(. Damit bliebe nur der Versand über smtp.
Dies ist nach meinen bisherigen Recherchen auch absolut kein Problem, ich habe auch schon erfolgreich Emails mit einen kleinen php-Test Code über smtp versendet. Leider ist es mir aber bisher nicht gelungen, den ursprünglichen Code auf smtp umzustellen - alles blieb bisher erfolglos.... ;-(. Daher erbitte ich jetzt Hilfe von den Profis - und ich denke, daß dies auch im Interessen von einigen anderen zu sein scheint (im Netz gibt es schon einige weitere erfolglose Versuche).
Der eigentlich Code-Schnipsel für smtp-Versand lautet ja
und dies muß jetzt irgendwie in die mailer.php (unten Code aus mailer-php angefügt) eingefügt werden.....aber wie und wo????
Das Formular wird ja letztendlich über
versendet. Ich möchte aber jetzt nicht über die Funktion "mail()" versenden, sondern eben über smtp.
Was fehlt hier noch?
DANKE!
mailer.php:
Ein auf php basierendes Kontaktformular, das Emails mittels der php-Funktion mail() an mich versendet, soll auf Versand über smpt umgestellt werden. Und: ich bin kein erfahrener php-Nutzer, sondern mehr eine Art "script-kiddie", d.h. ich suche mir die guten Sachen raus und mixe die dann Zusammen...
Ich nutze schon seit einigen Jahren das auf dem einfachem Perl-Formailer (Universal-Formmailer) von Stefan Münz basierenden php-Formmailer (Form Email) von Patrick Canterino (-> patshaping.de). Dies mag evtl. nicht mehr so modern sein, aber ich habe ihn in mühseliger Handarbeit immer mehr erweitert und für meine Bedürfnisse angepasst, so daß mittlerweile fast nur noch einige Grundfunktionen dem Ursprungs-Code gleichen. Ich finde den Formmailer auch wirklich gut, er muß sich auch heute nicht hinter anderen, moderneren Formular Mailern verstecken: Captcha-Funktion, Bestätigungs-Ausgabe Seite nach Versand, schöne Aufbearbeitung in der Email, usw., usw. (ein Umstieg auf phpmailer.worxware.com habe ich nach Anfangsschwierigkeiten aufgegeben, zumal lange nicht so umfangreich m.M. nach).
Langer Reder kurzer Sinn: seit einem Server Umzug kann ich leider nicht mehr auf die php-Funktion mail() zugreifen. Das ist leider so, und eine Diskussion hierüber ist unnötig.... ;-(. Damit bliebe nur der Versand über smtp.
Dies ist nach meinen bisherigen Recherchen auch absolut kein Problem, ich habe auch schon erfolgreich Emails mit einen kleinen php-Test Code über smtp versendet. Leider ist es mir aber bisher nicht gelungen, den ursprünglichen Code auf smtp umzustellen - alles blieb bisher erfolglos.... ;-(. Daher erbitte ich jetzt Hilfe von den Profis - und ich denke, daß dies auch im Interessen von einigen anderen zu sein scheint (im Netz gibt es schon einige weitere erfolglose Versuche).
Der eigentlich Code-Schnipsel für smtp-Versand lautet ja
PHP-Code:
//Versand über SMTP festlegen
$mail->IsSMTP();
$mail->Host = "ssl://smtp.xxxxxxx.com"; //SMTP-Server setzen
$mail->Port = 465;
$mail->SMTPAuth = true; //Authentifizierung aktivieren
$mail->Username = "xxxxx@xxxxxxx.com"; // SMTP Benutzername
$mail->Password = "yyyyyyyyyyyy"; // SMTP Passwort
Das Formular wird ja letztendlich über
PHP-Code:
mail($mailto[$x],$encoded_subject,$mailtext,$header) or die($err_send_error);
Was fehlt hier noch?
DANKE!
mailer.php:
PHP-Code:
<?php
#
# Form E-Mail 3.4
#
# Versenden einer E-Mail, die ueber ein Kontaktformular
# geschrieben wurde.
#
# Autor: Patrick Canterino <patrick@patshaping.de>
# Letzte Aenderung: 10.1.2009
#
# Copyright (C) 2002-2009 Patrick Canterino
#
# Diese Datei kann unter den Bedingungen der "Artistic License 1.0"
# weitergegeben und / oder veraendert werden.
# Siehe:
# http://www.opensource.org/licenses/artistic-license-1.0.php
#
# ===========
# Hauptteil
# ===========
require('config.php');
require('functions.php');
require('class.Template.php');
if($only_post && $_SERVER['REQUEST_METHOD'] != 'POST') show_fatal($err_only_post);
# Wenn Captchas aktiviert sind, Session starten
if($captcha_enable)
{
session_start();
# Pruefen, ob die zulaessige Zahl der Falscheingaben bei Captchas ueberschritten wurde
if($captcha_max && isset($_SESSION['captcha_failed']) && $_SESSION['captcha_failed'] >= $captcha_max)
{
show_fatal($err_captcha_max);
}
}
# Bestimmte Werte in Integers umwandeln
$name_min = intval($name_min);
$subject_min = intval($subject_min);
$text_min = intval($text_min);
$name_max = intval($name_max);
$subject_max = intval($subject_max);
$text_max = intval($text_max);
$line_break = intval($line_break);
# Formulardaten auslesen
$email = formdata('email');
$name = formdata('name');
$recipient = formdata('recipient');
$subject = formdata('subject');
$text = formdata('text');
# Pruefen, ob ueberhaupt was ausgefuellt wurde
if(!$name && !$email && !$text) show_user_error($err_nothing);
# Pruefen, ob alle wichtigen Formular-Felder ausgefuellt wurden
if(!$name) show_user_error($err_no_name);
if(!$email) show_user_error($err_no_email);
if(!$text) show_user_error($err_no_text);
if(!$subject) $subject = $default_subject; # Standard-Betreff
# Pruefen, ob Name, Betreff und Text lang genug sind
if($name_min && strlen($name) < $name_min) show_user_error($err_name_short);
if($subject_min && strlen($subject) < $subject_min) show_user_error($err_subject_short);
if($text_min && strlen($text) < $text_min) show_user_error($err_text_short);
# Pruefen, ob Name, Betreff und Text nicht zu lang sind
if($name_max && strlen($name) > $name_max) show_user_error($err_name_long);
if($subject_max && strlen($subject) > $subject_max) show_user_error($err_subject_long);
if($text_max && strlen($text) > $text_max) show_user_error($err_text_long);
# Pruefen, ob eingegebene E-Mail-Adresse gueltig ist
# Danke an "ich" aus dem SELFHTML Forum fuer die Muehe
$mail_regexp = ($no_tld)
? '/^([a-z0-9]+([\.]?|[-]?|[_]?)?)*([a-z0-9]+([\.]?[_]?)?)@([a-z0-9]+([\.]?|[-]?)?)*[a-z0-9]$/i'
: '/^([a-z0-9]+([\.]?|[-]?|[_]?)?)*([a-z0-9]+([\.]?[_]?)?)@([a-z0-9]+([\.]?|[-]?)?)*[a-z0-9]+\.{1}[a-z]{2,6}$/i';
if(!preg_match($mail_regexp,$email)) show_user_error($err_invalid_email);
# Captcha ueberpruefen
if($captcha_enable)
{
$captcha = formdata('captcha');
$captcha_incorrect = false;
if(isset($_SESSION) && isset($_SESSION['captcha']))
{
if($captcha_case)
{
if(!$captcha || empty($captcha) || $captcha != $_SESSION['captcha']) $captcha_incorrect = true;
}
else
{
if(!$captcha || empty($captcha) || strtolower($captcha) != strtolower($_SESSION['captcha'])) $captcha_incorrect = true;
}
if($captcha_incorrect)
{
if($captcha_max)
{
if(isset($_SESSION['captcha_failed']))
{
$_SESSION['captcha_failed']++;
}
else
{
$_SESSION['captcha_failed'] = 1;
}
}
if($captcha_max && isset($_SESSION['captcha_failed']) && $_SESSION['captcha_failed'] >= $captcha_max)
{
show_fatal($err_captcha_max);
}
else
{
show_user_error($err_captcha_incorrect);
}
}
}
else
{
show_fatal($err_captcha_session_failure);
}
}
# Referer ueberpruefen
if($check_referer)
{
$referer_ok = semicolon_split($referer_ok);
$referer_parts = parse_url($_SERVER['HTTP_REFERER']);
$referer_host = $referer_parts['host'];
if(in_array($referer_host,$referer_ok) === false) show_fatal($err_referer_not_ok);
}
# Zeilenumbrueche in Namen und Betreff durch Leerzeichen ersetzen
$name = preg_replace("/\015\012|\012|\015/",' ',$name);
$subject = preg_replace("/\015\012|\012|\015/",' ',$subject);
# Uhrzeit formatieren
date_default_timezone_set($timezone);
$time = strftime($timeformat);
# Header der Mail
$header = '';
if($friendly_sender)
{
if($friendly_sender == 2)
{
if(preg_match("/[\200-\377]/",$name))
{
# Absendernamen mit Base64 codieren
$encoded_name = base64_encode($name);
$encoded_name = wordwrap($encoded_name,56,"\015\012",1);
$encoded_name = "=?$charset?B?$encoded_name?=";
$encoded_name = str_replace("\015\012","?=\015\012 =?$charset?B?",$encoded_name);
}
else
{
# Bestimmte Zeichen im Absendernamen codieren
$encoded_name = str_replace('"','\"',$name);
$encoded_name = str_replace('(','\\(',$encoded_name);
$encoded_name = str_replace(')','\\)',$encoded_name);
$encoded_name = '"'.$encoded_name.'"';
}
$header = "From: $encoded_name <$email>\n";
}
else $header = "From: $email\n";
}
if($add_header)
{
if(!$friendly_sender) $header .= "Reply-To: $email\n";
$header .= 'Content-Type: text/plain; charset="'.$charset.'"'."\n";
$header .= 'Content-Transfer-Encoding: 8bit'."\n";
$header .= 'MIME-Version: 1.0'."\n";
$header .= 'X-Mailer: Form E-Mail 3.4'."\n";
$header .= 'X-Sender-IP: ['.$_SERVER['REMOTE_ADDR'].']';
}
else $header .= "Reply-To: $email";
$header = preg_replace("/\015\012|\012|\015/","\n",$header);
# Betreff mit Base64 codieren, wenn er Zeichen enthaelt,
# die nicht aus dem ASCII-Zeichensatz stammen
if(preg_match("/[\200-\377]/",$subject))
{
$encoded_subject = base64_encode($subject);
$encoded_subject = wordwrap($encoded_subject,56,"\015\012",1);
$encoded_subject = "=?$charset?B?$encoded_subject?=";
$encoded_subject = str_replace("\015\012","?=\015\012 =?$charset?B?",$encoded_subject);
}
else $encoded_subject = $subject;
# Mailtext formatieren...
$mtpl = new Template;
$mtpl->read_file($tpl_mail);
$mtpl->set_var('EMAIL', $email);
$mtpl->set_var('NAME', $name);
$mtpl->set_var('SUBJECT',$subject);
$mtpl->set_var('TIME', $time);
# ... Umgebungsvariablen einfuegen
if(isset($allowed_envs) && is_array($allowed_envs))
{
foreach($allowed_envs as $allowed_env)
{
if(isset($_SERVER[$allowed_env]))
{
$mtpl->set_var('ENV_'.$allowed_env,$_SERVER[$allowed_env]);
}
else
{
$mtpl->set_var('ENV_'.$allowed_env,'');
}
}
}
$mtpl->set_var('TEXT',$text);
$mtpl->parse();
$mailtext = $mtpl->get_template();
if($line_break) $mailtext = wordwrap($mailtext,$line_break);
$mailtext = preg_replace("/\015\012|\012|\015/","\n",$mailtext);
# ... und die Mail abschicken (bei einem Fehler erscheint eine Meldung)
if($recipient && is_array($aliases) && $aliases[$recipient])
{
# Empfaenger mit Alias-Namen
$mailto = $aliases[$recipient];
}
$mailto = semicolon_split($mailto);
for($x=0;$x<count($mailto);$x++)
{
mail($mailto[$x],$encoded_subject,$mailtext,$header) or die($err_send_error);
}
if($captcha_enable) session_destroy();
# Mail wurde erfolgreich versendet, also wird die Dankesseite angezeigt
if($return_url)
{
# Per Redirect auf Seite umleiten
if(!preg_match('!://!',$return_url))
{
# URL vervollstaendigen
$http_host = ($_SERVER['HTTP_HOST']) ? $_SERVER['HTTP_HOST'] : $_SERVER['SERVER_NAME'];
$protocol = '';
$port = '';
if($_SERVER['HTTPS'])
{
# SSL-verschluesseltes HTTP
$protocol = 'https://';
if($_SERVER['SERVER_PORT'] != 443) $port = ':'.$_SERVER['SERVER_PORT'];
}
else
{
# Normales HTTP
$protocol = 'http://';
if($_SERVER['SERVER_PORT'] != 80) $port = ':'.$_SERVER['SERVER_PORT'];
}
if(preg_match('!^/!',$return_url))
{
$return_url = $protocol.$http_host.$port.$return_url;
}
else
{
if(preg_match('!/$!',$_SERVER['SCRIPT_NAME'])) $path = substr($_SERVER['SCRIPT_NAME'],0,-1);
$path = substr($path,0,strrpos($path,'/')+1);
if(!preg_match('!^/!',$path)) $path = '/'.$path;
$return_url = $protocol.$http_host.$port.$path.$return_url;
}
}
header('Status: 303 See Other');
header('Location: '.$return_url);
}
else
{
# Mit Template formatierte Seite anzeigen
$stpl = new Template;
$stpl->read_file($tpl_sent);
$stpl->set_var('EMAIL', plain($email));
$stpl->set_var('MAIL', plain($mailtext));
$stpl->set_var('NAME', plain($name));
$stpl->set_var('SUBJECT',plain($subject));
$stpl->set_var('TEXT', plain($text));
$stpl->set_var('TIME', plain($time));
$stpl->parse();
print $stpl->get_template();
}
#
### Ende ###
?>
Kommentar