0

こんばんは、フォームを使用して読み込まれたファイルを電子メールに添付するのに問題があるため、このメールを書いています。フォルダーに添付する前に保存する必要があるかどうかわかりませんでした....これは私のコードです。メールは届きますが、添付されていません。誰かが私にどこが間違っているか教えてください。

$allegato=$_FILES['userfile']['tmp_name'];
$allegato_name=$_FILES['userfile']['name'];
$allegato_tipo=$_FILES['userfile']['type'];
$uploaddir = '/uploads/';
$uploadfile = $uploaddir . basename($_FILES['userfile']['name']);
$headers = 'From: '.$email.'' . "\r\n" .
        'Reply-To: pir.stefania@tiscali.it' . "\r\n" .
        'X-Mailer: PHP/' . phpversion();

            ;

 if ($_FILES["userfile"]["error"] > 0){
      echo "Return Code: " . $_FILES["userfile"]["error"] . "<br>";
  }else{
     if (file_exists("uploads/" . $_FILES["userfile"]["name"])){
        echo $_FILES["userfile"]["name"] . " already exists. ";
     }else{
        move_uploaded_file($_FILES["userfile"]["tmp_name"],
        "uploads/" . $_FILES["userfile"]["name"]);
        echo "Stored in: " . "uploads/" . $_FILES["userfile"]["name"];
     }
   }
    if(is_uploaded_file($allegato)){
        $file = fopen($allegato,'rb');
        $data = fread($file, filesize($allegato));
        fclose($file);

        $data = chunk_split(base64_encode($data));

        $semi_rand = md5(time());
        $mime_boundary = "==Multipart_Boundary_x{$semi_rand}x";

        $headers .= "\nMIME-Version: 1.0\n";
        $headers .= "Content-Type: multipart/mixed;\n";
        $headers .= " boundary=\"{$mime_boundary}\"";

        $msg .= "This is a multi-part message in MIME format.\n\n";

        $msg .= "--{$mime_boundary}\n";

        $msg .= "Content-Type: text/plain; charset=\"iso-8859-1\"\n";
        $msg .= "Content-Transfer-Encoding: 7bit\n\n";
        $msg .= $messaggio . "\n\n";

        $msg .= "--{$mime_boundary}\n";

        $msg .= "Content-Disposition: attachment;\n";
        $msg .= " filename=\"{$allegato_name}\"\n";
        $msg .= "Content-Transfer-Encoding: base64\n\n";
        $msg .= $data . "\n\n";

        $msg .= "--{$mime_boundary}--\n
     }else{
        $msg = $messaggio;
     }

      if (mail($destinatario, $oggetto, $msg, $headers)){
            echo "<p>Mail inviata con successo!</p>";
        }else{
            echo "<p>Errore!</p>";
       }

/ファインスクリプト/

        mail($destinatario, $oggetto, $messaggio, $headers) ;   
4

2 に答える 2

0

添付ファイルを扱う場合は、PHPMailerを使用することをお勧めします。簡単な添付例:

<?php
    require_once ('../class.phpmailer.php');

    $mail = new PHPMailer();
    // defaults to using php "mail()"

    $mail -> IsSendmail();
    // telling the class to use SendMail transport

    $body = file_get_contents('contents.html');
    $body = preg_replace('/[\]/i', '', $body);

    $mail -> SetFrom('name@yourdomain.com', 'First Last');

    $mail -> AddReplyTo("name@yourdomain.com", "First Last");

    $address = "whoto@otherdomain.com";
    $mail -> AddAddress($address, "John Doe");

    $mail -> Subject = "PHPMailer Test Subject via Sendmail, basic";

    $mail -> AltBody = "To view the message, please use an HTML compatible email viewer!";
    // optional, comment out and test

    $mail -> MsgHTML($body);

    $mail -> AddAttachment("images/phpmailer.gif");
    // attachment
    $mail -> AddAttachment("images/phpmailer_mini.gif");
    // attachment

    if (!$mail -> Send()) {
        echo "Mailer Error: " . $mail -> ErrorInfo;
    } else {
        echo "Message sent!";
    }
?>
于 2013-03-18T15:17:53.693 に答える
0

このような複雑なタスクには、Swiftmailer のようなMailerclassを使用するのが最適です。

SwiftMailer はattach()、メールにファイルを添付するために呼び出される関数を提供します。( http://swiftmailer.org/docs/messages.html )

于 2013-03-18T15:18:57.223 に答える