想象一下,一个用户,想把一种形式在其网站,使网站访客上传文件和一个简单的信息,这将立即通过电子邮件发送(即,该文件是不存在服务器上,或者如果是那只是暂时的)作为一个文件附件的说明中的信息的身体。

看到更多细节 http://a2zsollution.com/php-secure-e-mail/

什么是最简单的方法来完成这个吗?

最简单的条件:

  • 大(代码的高尔夫)
  • 轻松的执行情况(理想的是在一个所有文件,需要几乎没有外部资源)
  • 不混乱,为了模糊处理的(缺点尺寸的罚款)
  • 自给自足的实例(如果被称为没有一种形式后,这显示形式)

这几乎是逆向的: 怎么得到电子邮件及其附件PHP.它几乎可能已经回答 编制电子邮件与多个附件PHP, 但它实际上并没有表明代码。

有帮助吗?

解决方案

只是为了好玩我想我会敲起来。它结束了棘手比我想因为我就在不充分了解如何在边界的一部分工作,最终我的工作出的开始和结束的'--'重大和关闭它去了。

<?php
    if(isset($_POST['submit']))
    {
        //The form has been submitted, prep a nice thank you message
        $output = '<h1>Thanks for your file and message!</h1>';
        //Set the form flag to no display (cheap way!)
        $flags = 'style="display:none;"';

        //Deal with the email
        $to = 'me@example.com';
        $subject = 'a file for you';

        $message = strip_tags($_POST['message']);
        $attachment = chunk_split(base64_encode(file_get_contents($_FILES['file']['tmp_name'])));
        $filename = $_FILES['file']['name'];

        $boundary =md5(date('r', time())); 

        $headers = "From: webmaster@example.com\r\nReply-To: webmaster@example.com";
        $headers .= "\r\nMIME-Version: 1.0\r\nContent-Type: multipart/mixed; boundary=\"_1_$boundary\"";

        $message="This is a multi-part message in MIME format.

--_1_$boundary
Content-Type: multipart/alternative; boundary=\"_2_$boundary\"

--_2_$boundary
Content-Type: text/plain; charset=\"iso-8859-1\"
Content-Transfer-Encoding: 7bit

$message

--_2_$boundary--
--_1_$boundary
Content-Type: application/octet-stream; name=\"$filename\" 
Content-Transfer-Encoding: base64 
Content-Disposition: attachment 

$attachment
--_1_$boundary--";

        mail($to, $subject, $message, $headers);
    }
?>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<title>MailFile</title>
</head>

<body>

<?php echo $output; ?>

<form enctype="multipart/form-data" action="<?php echo $_SERVER['PHP_SELF'];?>" method="post" <?php echo $flags;?>>
<p><label for="message">Message</label> <textarea name="message" id="message" cols="20" rows="8"></textarea></p>
<p><label for="file">File</label> <input type="file" name="file" id="file"></p>
<p><input type="submit" name="submit" id="submit" value="send"></p>
</form>
</body>
</html>

很瘦骨嶙峋的人真的,显然使用内联CSS隐藏的形式是一个有点便宜而且你几乎可以肯定想要一点更多的反馈,用户!此外,我可能会花费更多的时间作出什么样的实际内容类型的文件,而不是欺骗和使用application/octet-stream但是,部分是相当有趣。

其他提示

结合这个 http://www.webcheatsheet.com/PHP/send_email_text_html_attachment.php#attachment

与php上传文件,例会的工作。在上传文件的实例,而不是使用move_uploaded_file移动它从临时文件夹你只需打开它:

$attachment = chunk_split(base64_encode(file_get_contents($tmp_file))); 

哪里 $tmp_file = $_FILES['userfile']['tmp_name'];

并把它作为一个附件的例子。

都在一个文件/自给自足:

<? if(isset($_POST['submit'])){
//process and email
}else{
//display form
}
?>

我认为它是一个快速的运动得到你所需要的工作基于上述两个可用的实例。

P.S.它需要得到上传的地方之前Apache将其传递给PHP做什么它想要有它。这将是你的系统的临时文件夹默认情况下,除非是改变配置文件。

这篇文章"如何创建PHP基于电子邮件形式与文件附件"提出了一步一步说明如何达到你的要求。

引用:

这篇文章显示你如何创建一个 PHP基于电子邮件的形式,支持 文件的附件。该条还将 告诉你如何验证的类型和 尺寸的上传文件。

它包括以下步骤:

  • HTML形式的文件上传箱
  • 获得上载的文件在PHP 脚本
  • 验证的尺寸和扩展 上载的文件
  • 复制的文件上传
  • 发送电子邮件

整个例码可以下载 在这里,

为了增加的文件的电子邮件作为附件, 需要储存在服务器上简要介绍。这是琐碎的,但是,把它放在一个tmp的位置,然后删除后你做了。

作为电子邮件, Zend邮件 有一个非常易于使用的界面,用于处理电子邮件附件。我们与整个Zend框架安装的,但我敢肯定你可能只是安装Zend_Mail库,而不需要任何其他模块的依赖关系。

与Zend_Mail,发送电子邮件附件作为简单的:

$mail = new Zend_Mail();
$mail->setSubject("My Email with Attachment");
$mail->addTo("foo@bar.baz");
$mail->setBodyText("Look at the attachment");
$attachment = $mail->createAttachment(file_get_contents('/path/to/file'));
$mail->send();

如果你是在寻找一个文件-包做整形式/电子邮件/附件东西,我没有看到一个。但个别组件当然是可用的和容易组装的。最棘手的事情大堆的电子邮件附件,其上述建议很简单。

我还没有测试的电子邮件的一部分,这个(我的测试盒不发送电子邮件),但我认为它会起作用。

<?php
if ($_POST) {
$s = md5(rand());
mail('email@example.com', 'attachment', "--$s

{$_POST['m']}
--$s
Content-Type: application/octet-stream; name=\"f\"
Content-Transfer-Encoding: base64
Content-Disposition: attachment

".chunk_split(base64_encode(join(file($_FILES['f']['tmp_name']))))."
--$s--", "MIME-Version: 1.0\r\nContent-Type: multipart/mixed; boundary=\"$s\"");
exit;
}
?>
<form method="post" enctype="multipart/form-data" action="<?php echo $_SERVER['PHP_SELF'] ?>">
<textarea name="m"></textarea><br>
<input type="file" name="f"/><br>
<input type="submit">
</form>

梨::Mail_Mime?当然,梨依赖性的(分)的2个文件(仅有mail_mime本身如果编辑,它除去的梨依赖关系),但它工作得很好。此外,大多数服务器有梨安装了某种程度上,并且在最好的情况下,他们有梨/邮件和梨/Mail_Mime.不能说对于大多数其他图书馆提供相同的功能。

你也可以考虑找到PHP的 IMAP扩展.这一点更加复杂,并需要更多的设置(未启用或者安装了默认情况下),但是必须更有效地compilng和发送信息到IMAP server.

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top