Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/heroku/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 将文件附加到电子邮件_Php_Javascript_Html - Fatal编程技术网

Php 将文件附加到电子邮件

Php 将文件附加到电子邮件,php,javascript,html,Php,Javascript,Html,我有一个HTML表单,当提交时,它在我的服务器上调用一个PHP脚本。表单的元素(收件人地址、主题行、正文)被发送到脚本,并生成和发送电子邮件。这一切都很好 我想在此进行扩展,允许用户从本地计算机选择一个文件,并将其发送到服务器,以作为电子邮件附件发送。用我当前的体系结构可以做到这一点吗?由于文件来自本地机器,所以这会出现在客户端的JavaScript代码中,还是出现在PHP脚本中?我不认为JavaScript可以做这样的事情,但我见过类似的工具打开文件浏览窗口,所以这一定是可能的,但可能不是Ja

我有一个HTML表单,当提交时,它在我的服务器上调用一个PHP脚本。表单的元素(收件人地址、主题行、正文)被发送到脚本,并生成和发送电子邮件。这一切都很好


我想在此进行扩展,允许用户从本地计算机选择一个文件,并将其发送到服务器,以作为电子邮件附件发送。用我当前的体系结构可以做到这一点吗?由于文件来自本地机器,所以这会出现在客户端的JavaScript代码中,还是出现在PHP脚本中?我不认为JavaScript可以做这样的事情,但我见过类似的工具打开文件浏览窗口,所以这一定是可能的,但可能不是JavaScript。任何关于从何处开始或如何开始的好建议都会很好。

您不需要JavaScript(事实上,在本例中,您可以使用它来添加一些bling)。这将是HTML部分:

<form enctype="multipart/form-data" action="__URL__" method="POST">
Send this file: <input name="userfile" type="file" />
<input type="submit" value="Send File" />
</form>
代码取自php.net(http://php.net/manual/en/features.file-upload.php)

用我当前的体系结构可以做到这一点吗

是的,可以使用PHP将文件附加到电子邮件

因为文件来自>他们的本地机器,所以这会出现在客户端的javascript代码中,还是出现在php脚本中

客户端的表单将提示用户选择要上载的文件(使用
表单元素,并将表单的
enctype
设置为
enctype=“multipart/form data”
),该文件将上载到服务器。从那里,服务器负责将附件转换为电子邮件可接受的格式(即base64_编码文件)。一旦文件被base64_编码,它必须正确地形成电子邮件,以便在收件人处被理解为附件

通过谷歌搜索“用php发送电子邮件附件”可以获得许多教程,包括:


首先-这是用PHP完成的,而不是Javascript。在浏览器中运行时,Javascript无法访问本地文件系统

您需要做的第一件事是将
添加到表单中,确保表单的
方法是
post
,并添加/更改
元素的
enctype
属性,使其成为
多部分/表单数据。关于成功上传文件的信息将在PHP中的
$\u FILES
数组中提供-在PHP中处理文件上传


接下来,您需要更改生成电子邮件的方式。如果您使用或之类的内容(建议使用其中一种),您只需阅读相应的文档,了解如何为邮件添加附件。如果您使用
mail()
,并想继续使用它,您必须学习如何工作。

使用HTML格式的多部分表单,如下所示:

<form action="send_email_with_attachment.php" method="post"enctype="multipart/form-data">
    <label for="file">Select file to attach:</label>
    <input type="file" name="file" id="file" /> 
    <br />
    <input type="submit" name="submit" value="Submit" />
</form>

这是用于一般文件上载,需要将上载的文件保存到非临时磁盘空间(这不是必需的)。这如何适用于电子邮件附件,或者更具体地说,OP?@nickb:OP要求提供指针,我认为这是一个很好的建议。StackOverflow不是免费的编码服务。我相信,Zrvan的回答是有价值的。@Icarus-直接从文件中获得c/p,而不向OP的主题解释申请,这不是一个答案。我不知道你为什么提到“免费编码服务”,我从来没有说过我们应该对OP的请求进行编码(你可以从我的回答中看出),也不需要用粗体文字来理解你的意思。@nickb我同意我本可以对OP使用的确切电子邮件解决方案更加好奇,但这是“关于从哪里开始的好建议”。至于不需要的存储部分,这是您的合理假设,但不一定是真的。@nickb:Zyrvan解释说这不需要Javascript(OP似乎相信这一点),然后提供了一个如何使用纯HTML实现它的示例。我认为澄清Javascript误解并提供示例代码回答了问题(我当前的架构是否可能?->是,提供的代码。需要Javascript?->否),因此我认为这是一个有价值的答案,因此否决票是不公平的(注意:我并不是说你否决了他的答案)。这个问题能得到更好的回答吗?当然这是一个错误的答案还是没有解决问题?不
<form action="send_email_with_attachment.php" method="post"enctype="multipart/form-data">
    <label for="file">Select file to attach:</label>
    <input type="file" name="file" id="file" /> 
    <br />
    <input type="submit" name="submit" value="Submit" />
</form>
To: Someone
Subject: Test HTML email
From: SomeoneElse
Reply-To: Nobody
MIME-version: 1.0
Content-Type: multipart/mixed; boundary=gc0p4Jq0M2Yt08jU534c0p
Date: Tue,  29 Nov 2011 09:55:36 +0100 (CET)


--gc0p4Jq0M2Yt08jU534c0p
Content-Type: text/plain; charset="iso-8859-1"
Content-Transfer-Encoding: 7bit

Hello World!!!
This is simple text email message.

--gc0p4Jq0M2Yt08jU534c0p
Content-Type: image/png; name="img.png"
Content-Transfer-Encoding: base64
Content-ID: xxxx
Content-Disposition: inline, filename="img.png"

iVBORw0KGgoAAAANSUhEUgAAAAUA
AAAFCAYAAACNbyblAAAAHElEQVQI12P4//8/w38GIAXDIBKE0DHxgljNBAAO
9TXL0Y4OHwAAAABJRU5ErkJggg==

--gc0p4Jq0M2Yt08jU534c0p--