我制作了一个将图片上传到上传文件夹的表单。但现在我需要将图像邮寄到附件中。我试过这个
$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";
}
答案 0 :(得分: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";
}
*/
答案 1 :(得分:0)
从php send email with attachment
中的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);
}
答案 2 :(得分:0)
为了善良,请不要尝试使用PHP的内置mail()
功能来发送附件 - 这对于基本邮件来说已经够糟了,但对于真正需要的附件使用一个体面的图书馆。
您可以使用多个库。
我建议phpMailer。它非常易于使用,并且使添加附件变得非常简单 - 请参阅this examples page以了解它是多么容易。
是的,这意味着你必须扔掉你现有的代码。这是一件好事。没有违反你的代码,但它肯定不是一个像样的邮件库。 phpMailer已经开发了年,并处理了当时出现的所有错误和怪癖。如果您准备花费相同的时间来修复自己代码中的错误,那么请确保自己动手。如果没有,你真的应该使用一个图书馆,其他人已经为你完成了所有艰苦的工作。
答案 3 :(得分:0)
我也会使用Swiftmailer(我在使用symfony 1.4进行开发时仍然使用它。)
但只是为了完成这个答案,Swiftmailer在附加远程文件(特别是PDF文件)时会遇到某种问题。这仍然是一个悬而未决的问题(https://github.com/swiftmailer/swiftmailer/issues/207)。但在本期末,您可以找到一种解决方法,即:
$attachment = Swift_Attachment::newInstance(file_get_contents($url_file));
我会通过重命名文件名来补充它,或者它会附加一个nonane文件:
$attachment = Swift_Attachment::newInstance(file_get_contents($url_file))->setFilename('arquivo.pdf');
就是这样:))