2016-08-02 5 views
1

Есть ли проблемы с моими нижеследующими кодами?Как добавить изображения в качестве вложения в PHP-почту?

Я пытаюсь добавить изображение в качестве вложения в HTML-почту, отправить его из моей формы. У пользователей есть возможность добавлять изображения и нажать кнопку отправки, они будут загружены и отправлены.

Но ошибка возникает при нажатии кнопки submit и в течение нескольких секунд она автоматически перенаправляется на страницу успеха, но никакая электронная почта не отправляется из формы. Если в моем коде есть ошибки, кто-то может очистить код и указать на ошибки, которые я сделал?

Благодаря

require_once "Mail.php"; 
     $semi_rand = md5(time()); 
     $mime_boundary = "==Multipart_Boundary_x{$semi_rand}x"; 
     $headers .= "\nMIME-Version: 1.0\n" . "Content-Type: multipart/mixed;\n" . " boundary=\"{$mime_boundary}\""; 
     $message = "This is a multi-part message in MIME format.\n\n" . "--{$mime_boundary}\n" . "Content-Type: text/plain; charset=\"iso-8859-1\"\n" . "Content-Transfer-Encoding: 7bit\n\n" . $message . "\n\n"; 
     $message .= "--{$mime_boundary}\n"; 
     // preparing attachments    
      $file = fopen($filename,"rb"); 
      $data = fread($file,filesize($filename)); 
      fclose($file); 
      $data = chunk_split(base64_encode($data)); 
      $message .= "Content-Type: {\"application/octet-stream\"};\n" . " name=\"".$fname."\"\n" . 
      "Content-Disposition: attachment;\n" . " filename=\"$fname\"\n" . 
      "Content-Transfer-Encoding: base64\n\n" . $data . "\n\n"; 
      $message .= "--{$mime_boundary}--\n"; 
$Subject = Trim(stripslashes($_POST['Subject'])); 
$Name = Trim(stripslashes($_POST['Name'])); 
$filename = "/uploads/" . $_FILES["file"]["name"]; 
$Email = Trim(stripslashes($_POST['Email'])); 
$EmailMe = '[email protected]'; 
$ip = $_SERVER['REMOTE_ADDR']; 
$filename="/uploads/file.jpeg"; 
$fname="file.jpeg"; 
$Messages = Trim(stripslashes($_POST['Message'])); 
$smtp = Mail::factory('smtp', array(
     'host' => 'host', 
     'port' => '##', 
     'auth' => true, 
     'username' => '[email protected]', 
     'password' => '*********', 
    )); 
$Body = "<html> html email</html>"; 
$Body1 = "<html> html email</html>"; 
$semi_rand = md5(time()); 
$mime_boundary = "==Multipart_Boundary_x{$semi_rand}x"; 
$headers .= "\nMIME-Version: 1.0\n" . "Content-Type: multipart/mixed;\n" . " boundary=\"{$mime_boundary}\""; 
$headers .= "From: Roberta <[email protected]> \r\n"; 
$headers .= "Reply-To: <[email protected]> \r\n"; 
$headers .= "Return-Path: [email protected]"; 
$headers .= "X-Mailer: PHP \r\n"; 
     $message = "This is a multi-part message in MIME format.\n\n" . "--{$mime_boundary}\n" . "Content-Type: text/plain; charset=\"iso-8859-1\"\n" . "Content-Transfer-Encoding: 7bit\n\n" . $message . "\n\n"; 
     $message .= "--{$mime_boundary}\n"; 
     // preparing attachments    
      $file = fopen($filename,"rb"); 
      $data = fread($file,filesize($filename)); 
      fclose($file); 
      $data = chunk_split(base64_encode($data)); 
      $message .= "Content-Type: {\"application/octet-stream\"};\n" . " name=\"".$fname."\"\n" . 
      "Content-Disposition: attachment;\n" . " filename=\"$fname\"\n" . 
      "Content-Transfer-Encoding: base64\n\n" . $data . "\n\n"; 
      $message .= "--{$mime_boundary}--\n"; 

$success = mail($Email, $Subject, $message, $headers, "-f " . $from); 
      mail($EmailMe, $Subject, $message, $ip, $headers, "-f " . $from); 

      if (success){ 
    print "<meta http-equiv=\"refresh\" content=\"0;URL=/thanks\">"; 
} 
else{ 
    echo "<meta http-equiv=\"refresh\" content=\"0;URL=/error\">"; 
} 
+1

Не пытайтесь сделать это самостоятельно, это действительно бессмысленно, и ваш текущий код является небезопасным. [Использовать PHPMailer] (https://github.com/PHPMailer/PHPMailer), так как вы отметили этот вопрос вместе с ним и основываете свой код на приведенном примере, который делает именно это. Он короче, проще и надежнее. – Synchro

ответ

0

я думаю, его лучше использовать PHPMailer

отъ withot взгляд на этот пример из php.net

Там differenece в теле, заголовки электронной почты (с приложением , без приложения ), см. этот полный пример ниже: отлично работает для меня (LINUX , WIN) и (Yahoo Mail, Hotmail, Gmail, ...)

<?php 
$to  = $_POST['to']; 
$email = $_POST['email']; 
$name = $_POST['name']; 
$subject = $_POST['subject']; 
$comment = $_POST['message']; 

$To   = strip_tags($to); 
$TextMessage =strip_tags(nl2br($comment),"<br>"); 
$HTMLMessage =nl2br($comment); 
$FromName =strip_tags($name); 
$FromEmail =strip_tags($email); 
$Subject  =strip_tags($subject); 

$boundary1 =rand(0,9)."-" 
.rand(10000000000,9999999999)."-" 
.rand(10000000000,9999999999)."=:" 
.rand(10000,99999); 
$boundary2 =rand(0,9)."-".rand(10000000000,9999999999)."-" 
.rand(10000000000,9999999999)."=:" 
.rand(10000,99999); 


for($i=0; $i < count($_FILES['youfile']['name']); $i++){ 
if(is_uploaded_file($_FILES['fileatt']['tmp_name'][$i]) && 
    !empty($_FILES['fileatt']['size'][$i]) && 
    !empty($_FILES['fileatt']['name'][$i])){ 

$attach  ='yes'; 
$end   =''; 

    $handle  =fopen($_FILES['fileatt']['tmp_name'][$i], 'rb'); 
    $f_contents =fread($handle, $_FILES['fileatt']['size'][$i]); 
    $attachment[]=chunk_split(base64_encode($f_contents)); 
    fclose($handle); 

$ftype[]  =$_FILES['fileatt']['type'][$i]; 
$fname[]  =$_FILES['fileatt']['name'][$i]; 
} 
} 

/*************************************************************** 
Creating Email: Headers, BODY 
1- HTML Email WIthout Attachment!! <<-------- H T M L --------- 
***************************************************************/ 
#---->Headers Part 
$Headers  =<<<AKAM 
From: $FromName <$FromEmail> 
Reply-To: $FromEmail 
MIME-Version: 1.0 
Content-Type: multipart/alternative; 
    boundary="$boundary1" 
AKAM; 

#---->BODY Part 
$Body  =<<<AKAM 
MIME-Version: 1.0 
Content-Type: multipart/alternative; 
    boundary="$boundary1" 

This is a multi-part message in MIME format. 

--$boundary1 
Content-Type: text/plain; 
    charset="windows-1256" 
Content-Transfer-Encoding: quoted-printable 

$TextMessage 
--$boundary1 
Content-Type: text/html; 
    charset="windows-1256" 
Content-Transfer-Encoding: quoted-printable 

$HTMLMessage 

--$boundary1-- 
AKAM; 

/*************************************************************** 
2- HTML Email WIth Multiple Attachment <<----- Attachment ------ 
***************************************************************/ 

if($attach=='yes') { 

$attachments=''; 
$Headers  =<<<AKAM 
From: $FromName <$FromEmail> 
Reply-To: $FromEmail 
MIME-Version: 1.0 
Content-Type: multipart/mixed; 
    boundary="$boundary1" 
AKAM; 

for($j=0;$j<count($ftype); $j++){ 
$attachments.=<<<ATTA 
--$boundary1 
Content-Type: $ftype[$j]; 
    name="$fname[$i]" 
Content-Transfer-Encoding: base64 
Content-Disposition: attachment; 
    filename="$fname[$j]" 

$attachment[$j] 

ATTA; 
} 

$Body  =<<<AKAM 
This is a multi-part message in MIME format. 

--$boundary1 
Content-Type: multipart/alternative; 
    boundary="$boundary2" 

--$boundary2 
Content-Type: text/plain; 
    charset="windows-1256" 
Content-Transfer-Encoding: quoted-printable 

$TextMessage 
--$boundary2 
Content-Type: text/html; 
    charset="windows-1256" 
Content-Transfer-Encoding: quoted-printable 

$HTMLMessage 

--$boundary2-- 

$attachments 
--$boundary1-- 
AKAM; 
} 

/*************************************************************** 
Sending Email 
***************************************************************/ 
$ok=mail($To, $Subject, $Body, $Headers); 
echo $ok?"<h1> Mail Sent</h1>":"<h1> Mail not SEND</h1>"; 
?> 
+0

это php с PHPmailer или без? – Shamshid

+0

выше код без PHPMailer для увидеть, как это работает просто посетить его связь есть чистый пример https://github.com/PHPMailer/PHPMailer $ mail-> addAttachment ('/ вар/TMP/file.tar .gz '); // Добавить вложения $ mail-> addAttachment ('/ tmp/image.jpg', 'new.jpg'); // Необязательное имя –

 Смежные вопросы

  • Нет связанных вопросов^_^