SMTP Anlagenerweiterung
Torsten
- php
Ich habe bereits ein SMTP versendescript
was ich nun nicht mehr hinbekomme ist,
das dieses auch eine fest vorgegebene Dateianlage mitversendet.
Jemand eine Idee?
<?php
$title="";
$url="";
$to="";
$answer_subject="Betreff";
$admin_mail="";
$smtp_host ='';
$smtp_username = '';
$smtp_password = '';
$user_become_an_mail=false;
echo "<html>\n";
echo "<head>\n";
echo "<meta http-equiv="content-type" content="text/html; charset=iso-8859-1">\n";
echo "<title>$title</title>\n";
echo "</head>\n";
echo "<body>\n";
function retour($url)
{
echo "<meta http-equiv="refresh" content="1; URL=$url">";
}
if (!isset($_POST['send']))
{
die("No direct call.");
}
if ((empty($_POST['name'])) or
(empty($_POST['email'])) or
(empty($_POST['subject'])) or
//(empty($_POST['mail_to'])) or
(empty($_POST['message'])) )
{
echo "<a href="javascript:history.back()">back</a>";
die('<br>Please fill out all fields.');
}
if (!ereg("^([a-zA-Z0-9.\_-]+)@([a-zA-Z0-9.-]+.[A-Za-z][A-Za-z]+)$",$_POST['email']))
die ('wrong email');
$subject=$_POST['subject'];
$message= '<html><body><br>Begin off message:<br>Name: '.$_POST['name'].'<br>'.
'Message: '.str_replace("\n", "<br>",$_POST['message']).'<br>'.
'Email-from: '.$_POST['email'].'<br>'.
'Copyright (c) from <a href="http://cdr.dpaehl.de">Dirk Paehl.</a></body><html>';
$from="$_POST[name] <$_POST[email]>";
$headers ="Return-Path: $_POST[name] <$_POST[email]>\r\n";
$headers.="From: $from\nX-Mailer: SMTP FORMULAR MAILER from Dirk Paehl\r\n";
$headers .="Mime-Version: 1.0\r\n";
$headers .="Content-type: text/html; charset=iso-8859-1\r\n";
define('SMTP_INCLUDED', 1);
function server_parse($socket, $response)
{
$server_response = '';
while ( substr($server_response,3,1) != ' ' )
{
if( !( $server_response = fgets($socket, 256) ) )
{
die("Couldn't get mail server response codes");
}
}
if( !( substr($server_response, 0, 3) == $response ) )
{
die("Ran into problems sending Mail. Response: $server_response");
}
}
function smtpmail($mail_to, $subject, $message, $headers = "")
{
global $smtp_host, $smtp_username, $smtp_password, $admin_email;
$message = preg_replace("/(?<!\r)\n/si", "\r\n", $message);
/*echo "SMTP_HOST".$smtp_host;
echo "<br>\nSMTP_USER".$smtp_user;
echo "<br>\nSMTP_PW".$smtp_password;
echo "<br>\nADMIN".$admin_email; */
if ($headers != "")
{
if(is_array($headers))
{
if(sizeof($headers) > 1)
{
$headers = join("\r\n", $headers);
}
else
{
$headers = $headers[0];
}
}
$headers = chop($headers);
//
// Make sure there are no bare linefeeds in the headers
//
$headers = preg_replace("/(?<!\r)\n/si", "\r\n", $headers);
//
// Ok this is rather confusing all things considered,
// but we have to grab bcc and cc headers and treat them differently
// Something we really didn't take into consideration originally
//
$header_array = explode("\r\n", $headers);
@reset($header_array);
$headers = "";
$cc = '';
$bcc = '';
while( list(, $header) = each($header_array) )
{
if( preg_match("/^cc:/si", $header) )
{
$cc = preg_replace("/^cc:(.*)/si", "\1", $header);
}
else if( preg_match("/^bcc:/si", $header ))
{
$bcc = preg_replace("/^bcc:(.*)/si", "\1", $header);
$header = "";
}
$headers .= $header . "\r\n";
}
$headers = chop($headers);
$cc = explode(",", $cc);
$bcc = explode(",", $bcc);
}
if(trim($mail_to) == "")
{
exit();
}
if(trim($subject) == "")
{
die("No email Subject specified");
}
$mail_to_array = explode(",", $mail_to);
if( !$socket = fsockopen($smtp_host, 8010, $errno, $errstr, 20) )
{
die("Could not connect to smtp host : $errno : $errstr");
}
server_parse($socket, "220");
if( !empty($smtp_username) && !empty($smtp_password) )
{
fputs($socket, "EHLO " . $smtp_host . "\r\n");
server_parse($socket, "250");
fputs($socket, "AUTH LOGIN\r\n");
server_parse($socket, "334");
fputs($socket, base64_encode($smtp_username) . "\r\n");
server_parse($socket, "334");
fputs($socket, base64_encode($smtp_password) . "\r\n");
server_parse($socket, "235");
}
else
{
fputs($socket, "HELO " . $smtp_host . "\r\n");
server_parse($socket, "250");
}
fputs($socket, "MAIL FROM: <" . $admin_email . ">\r\n");
server_parse($socket, "250");
$to_header = "To: ";
@reset( $mail_to_array );
while( list( , $mail_to_address ) = each( $mail_to_array ))
{
$mail_to_address = trim($mail_to_address);
if ( preg_match('/[^ ]+@[^ ]+/', $mail_to_address) )
{
fputs( $socket, "RCPT TO: <$mail_to_address>\r\n" );
server_parse( $socket, "250" );
}
$to_header .= "<$mail_to_address>, ";
}
@reset( $bcc );
while( list( , $bcc_address ) = each( $bcc ))
{
$bcc_address = trim( $bcc_address );
if ( preg_match('/[^ ]+@[^ ]+/', $bcc_address) )
{
fputs( $socket, "RCPT TO: <$bcc_address>\r\n" );
server_parse( $socket, "250" );
}
}
@reset( $cc );
while( list( , $cc_address ) = each( $cc ))
{
$cc_address = trim( $cc_address );
if ( preg_match('/[^ ]+@[^ ]+/', $cc_address) )
{
fputs($socket, "RCPT TO: <$cc_address>\r\n");
server_parse($socket, "250");
}
}
// Ok now we tell the server we are ready to start sending data
fputs($socket, "DATA\r\n");
// This is the last response code we look for until the end of the message.
server_parse($socket, "354");
// Send the Subject Line...
fputs($socket, "Subject: $subject\r\n");
// Now the To Header.
fputs($socket, "$to_header\r\n");
// Now any custom headers....
fputs($socket, "$headers\r\n\r\n");
// Ok now we are ready for the message...
fputs($socket, "$message\r\n");
// Ok the all the ingredients are mixed in let's cook this puppy...
fputs($socket, ".\r\n");
server_parse($socket, "250");
// Now tell the server we are done and close the socket...
fputs($socket, "QUIT\r\n");
fclose($socket);
return TRUE;
}
$result = @smtpmail($to,$subject,$message,$headers);
if ($result)
{
echo ('mail was succesfully send.<br>');
if ($user_become_an_mail)
{
$datei = fopen( "php_mail.dat", "r" );
$bestatigung = fread( $datei, filesize( "php_mail.dat" ) );
fclose( $datei );
$bestatigung=ereg_replace("%meldung%",$_POST['message'],$bestatigung);
$from="<$admin_mail>";
$headers ="From: $from\nX-Mailer: SMTP FORMULAR MAILER from Dirk Paehl\r\n";
$body ="\n\n";
smtpmail($_POST[email],$answer_subject,$bestatigung,$headers);
}
}
else
echo ('Error can not send mail. try again later<br>');
retour($url);
?>
</body>
</html>
Hello,
Ich habe bereits ein SMTP versendescript
was ich nun nicht mehr hinbekomme ist,
das dieses auch eine fest vorgegebene Dateianlage mitversendet.Jemand eine Idee?
1. Räume den Code auf
trenne ihn in
- Variablen- und Konstantendeklaratioen
- Funktionsdefinitionen
- Datenübernahme
- Entscheidungsteil
- Berechnungsteil
- Ausgabe
2. Beschäftige Dich mit Dateiuploads
3. Beschäftige Dich mit "MIME Mail" (hier im Archiv suchen
4. Schau Dir an, wie Dein Mailclient Mails aufbereitet, die
- reine text-Mails sind
- reine text-Mails mit Anhang sind
- HTML-Mails (nur text) ohne Anhang
- HTML-Mails mit eingebetteten Bildern
- HTML-Mails mit eingebetteten Bildern und Anhang
5. recherchiere , was "mail injection" bedeutet
tbc
Das Script von Dirk ist nur etwas für Leute, die wissen, was sie tun.
Damit anzufangen, wenn man scheinbar so wenig Erfahrungen hat, wie Du, ist wie Klettern an der Steilwand ohne Sicherung. Wenn Du den Kick unbedingt brauchst ...
Harzliche Grüße vom Berg
http://www.annerschbarrich.de
Tom
Hello,
mal eine Frage an ALLE hier im Forum:
Was mag den Verfasser des Scriptes bewogen haben, dieses Statement aufzunehmen?
if( !$socket = fsockopen($smtp_host, 8010, $errno, $errstr, 20) )
Port 8010 gehört nicht unbedingt in den Bereich von Mailservern...
Harzliche Grüße vom Berg
http://www.annerschbarrich.de
Tom