0

アップロード フォルダに画像をアップロードするフォームを作成しました。しかし今、添付ファイルで画像をメールする必要があります。私はこれを試しました

$Body .= "http://myurl.nl/upload/" . $filename . "";

実際には、サーバーから直接ダウンロードできる限り、画像が添付ファイルに含まれているかどうかは問題ではありません。だから今、ファイルのパスに苦労しています

$allowedExts = array("jpg", "jpeg", "gif", "png");
$extension = end(explode(".", $_FILES["file"]["name"]));
if ((($_FILES["file"]["type"] == "image/gif")
|| ($_FILES["file"]["type"] == "image/jpeg")
|| ($_FILES["file"]["type"] == "image/png")
|| ($_FILES["file"]["type"] == "image/pjpeg"))
&& ($_FILES["file"]["size"] < 10000000)
&& in_array($extension, $allowedExts))
{
if ($_FILES["file"]["error"] > 0)
{
echo "Return Code: " . $_FILES["file"]["error"] . "<br>";
}
else
{
echo "Upload: " . $_FILES["file"]["name"] . "<br>";
echo "Type: " . $_FILES["file"]["type"] . "<br>";
echo "Size: " . ($_FILES["file"]["size"] / 1024) . " kB<br>";
echo "Temp file: " . $_FILES["file"]["tmp_name"] . "<br>";

if (file_exists("upload/" . $_FILES["file"]["name"]))
  {
  echo $_FILES["file"]["name"] . " already exists. ";
  }
else
  {
  $filename = str_replace(' ', '', $_FILES["file"]["tmp_name"]);
  move_uploaded_file($_FILES["file"]["tmp_name"],
  "upload/" . $filename);
  echo "Stored in: " . "upload/" . $_FILES["file"]["name"];
  }
  }
 }
else
 {
 echo "Invalid file";
 }
4

4 に答える 4

2

私は Swiftmailer を使用し、次の方法を使用します: http://swiftmailer.org/docs/messages.html#attaching-files

<?php

require_once 'lib/swift_required.php';

// Create the message
$message = Swift_Message::newInstance()

  // Give the message a subject
  ->setSubject('Your subject')

  // Set the From address with an associative array
  ->setFrom(array('john@doe.com' => 'John Doe'))

  // Set the To addresses with an associative array
  ->setTo(array('receiver@domain.org', 'other@domain.org' => 'A name'))

  // Give it a body
  ->setBody('Here is the message itself', 'text/html')

  // You can attach files from a URL if allow_url_fopen is on in php.ini
  ->attach(Swift_Attachment::fromPath('my-document.pdf'));

// If you have SMPT, use the SMTP transport(http://swiftmailer.org/docs/sending.html#using-the-smtp-transport)
// Create the Transport
$transport = Swift_MailTransport::newInstance();

// Create the Mailer using your created Transport
$mailer = Swift_Mailer::newInstance($transport);

// Send the message
$numSent = $mailer->send($message);

printf("Sent %d messages\n", $numSent);

/* Note that often that only the boolean equivalent of the
   return value is of concern (zero indicates FALSE)

if ($mailer->send($message))
{
  echo "Sent\n";
}
else
{
  echo "Failed\n";
}

*/
于 2013-02-26T12:37:48.210 に答える
0

PHPのdqhendricksから取得した回答は、添付ファイル付きの電子メールを送信します

function mail_attachment($to, $subject, $message, $from, $file) {
      // $file should include path and filename
      $filename = basename($file);
      $file_size = filesize($file);
      $content = chunk_split(base64_encode(file_get_contents($file))); 
      $uid = md5(uniqid(time()));
      $from = str_replace(array("\r", "\n"), '', $from); // to prevent email injection
      $header = "From: ".$from."\r\n"
          ."MIME-Version: 1.0\r\n"
          ."Content-Type: multipart/mixed; boundary=\"".$uid."\"\r\n\r\n"
          ."This is a multi-part message in MIME format.\r\n" 
          ."--".$uid."\r\n"
          ."Content-type:text/plain; charset=iso-8859-1\r\n"
          ."Content-Transfer-Encoding: 7bit\r\n\r\n"
          .$message."\r\n\r\n"
          ."--".$uid."\r\n"
          ."Content-Type: application/octet-stream; name=\"".$filename."\"\r\n"
          ."Content-Transfer-Encoding: base64\r\n"
          ."Content-Disposition: attachment; filename=\"".$filename."\"\r\n\r\n"
          .$content."\r\n\r\n"
          ."--".$uid."--"; 
      return mail($to, $subject, "", $header);
     }
于 2013-02-26T12:38:33.070 に答える
0

念のため、添付ファイルの送信に PHP の組み込み関数を使用しようとさえしないでください。mail()基本的なメールには十分ですが、添付ファイルには適切なライブラリを使用する必要があります。

使用できるライブラリがいくつかあります。

phpMailerをお勧めします。使い方は非常に簡単で、添付ファイルの追加も非常に簡単です。この例のページを参照して、いかに簡単かを確認してください。

はい、これは、既存のコードを破棄する必要があることを意味します。これは良いことです。コードに問題はありませんが、まともなメール ライブラリではないことは確かです。phpMailer は何年にもわたって開発されており、その間に発生したすべてのバグや癖に対処してきました。自分のコードのバグを修正するのに同じ時間を費やす準備ができている場合は、必ず自分で行ってください。そうでない場合は、他の誰かがあなたのためにすべての大変な作業を既に行っているライブラリを実際に利用する必要があります。

于 2013-02-26T14:32:30.660 に答える