- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
在将文件上传到我的服务器后,我使用它来将文件附加到邮件中:
for ($i = 0; $i <= 2; $i++)
{
$mail->AddAttachment($locatie.$_FILES['uploaded'.$i]['name'], $_FILES['uploaded'.$i]['name']);
}
添加附件是可选的,但是当没有文件上传时会报错:Could not access file
如何防止显示错误?
最佳答案
先看这里如何处理文件上传:
您需要引用临时文件名。这是获取实际文件名所必需的,而不仅仅是文件名。
$_FILES['userfile']['tmp_name']
因此访问 $_FILES['userfile']['name']
获取附件的书面文件名和 $_FILES['userfile']['tmp_name']
指定上传的实际文件(数据)。
粗略地放入您的代码中,incl. a validation你也应该验证它实际上是一个文件上传:
for ($i = 0; $i <= 2; $i++)
{
# ignore file that have not been uploaded
if (empty($_FILES['uploaded'.$i])) continue;
# get the data of the file
$fileName = $_FILES['uploaded'.$i]['name'];
$filePath = $_FILES['uploaded'.$i]['tmpname'];
# add only if the file is an upload
is_uploaded_file($filePath)
&& $mail->AddAttachment($filePath, $fileName)
;
}
您的代码混合了两个作业。这使您难以调试和改进 - 以及处理文件/系统问题和安全性等问题。
我建议您采用一种不同的方法:一个接一个地执行。在您的情况下,1.) 处理文件上传并收集您需要的数据,2.) 添加这些附件。
您可以通过查看 PHP 手册来改进第一部分。如果你想支持多文件上传,建议你以页面Uploading multiple files给出的建议为导向。 .然后处理文件上传并形成一个数组,每个条目包含客户端计算机上的文件名和服务器系统上的路径。
// see PHP Manual for multi file uploads, this is based on it
$validAttachments = array();
foreach($_FILES['userfile']['name'] as $index => $fileName)
{
$filePath = $_FILES['userfile']['tmp_name'][$index];
if(is_uploaded_file($filePath))
{
$attachment = new stdClass;
$attachment->fileName = $fileName;
$attachment->filePath = $filePath;
$validAttachments[] = $attachment;
}
}
如果该部分已经存在错误,您就知道它与文件上传过程有关。这是未经测试的代码,因此只是说明一个方向。
在第二步中,您可以遍历这样的数组并添加附件:
foreach($validAttachments as $attachment)
{
$mail->AddAttachment($attachment->filePath, $attachment->fileName);
}
然后您可以更好地检查不同部分中的错误,而不会将一个问题与另一个问题混在一起。
关于phpMailer附件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6322610/
如何安装 phpMailer在共享托管环境中?我需要将其用于用户的电子邮件验证和密码更改。 最佳答案 您可以在这里下载:https://github.com/PHPMailer/PHPMailer 将
当我使用 phpmailer 通过 Gmail 发送时,电子邮件需要很长时间才能发送,而且有时发送不成功。我正在使用 XAMPP 作为本地主机。 这是我的代码: if($_POST['submit']
我正在使用 PHPMailer 发送一些简单的电子邮件,但是函数 SetFrom() 似乎不起作用,即使我使用的代码直接来自 phpmails 文档 ( http://phpmailer.worxwa
使用 PHP 邮件程序 6.0.6 版 我知道类似的问题得到了回答,但我的情况不同。 我已经成功配置了它运行良好的脚本;我正在接收邮件,然后突然之间没有任何变化,它开始向我抛出这个错误。 错误
我可以生成 pdf 以便轻松查看和下载。我正在尝试发送一封附有 pdf 的电子邮件。我已经连续几天浏览谷歌了几个小时,没有什么比这个链接更让我更接近了,sending an email attachm
我可以生成 pdf 以便轻松查看和下载。我正在尝试发送一封附有 pdf 的电子邮件。我已经连续几天浏览谷歌了几个小时,没有什么比这个链接更让我更接近了,sending an email attachm
由于错误,我无法收到确认电子邮件。这是我的 PhpMailer 错误。 fatal error :未捕获错误:在 C:\xampp\htdocs\Web\PHPMailer\PHPMailer.php
这个问题在这里已经有了答案: SMTP connect() failed PHPmailer - PHP (17 个答案) 关闭 7 年前。 这是我在网上引用了很多之后从本地主机发送电子邮件的代码。
我写了一个 PHP 脚本,可以发送邮件。我从“mail@something.com”发送它们并将“返回路径”设置为“bounce@something.com”,但我仍然收到退回邮件到发件人邮件(“ma
我使用 php curl() 函数从服务器 A 连接到邮件服务器 B 以发送邮件。 $body = "body\n\nmore body\nmore body\n\nmore body\n\n"; $
PHPMailer 只是在发送电子邮件时挂起。我逐行注释了所有代码,一切正常,直到到达 如果(!$邮件->发送()) 此时页面进入旋转状态 - 没有错误消息或任何其他错误指示。我想我拥有所有必需的
我在问这里之前阅读了一些其他问题,因为其他答案没有回应我的问题。 我有一个用 php 定制的 cms。例如,如果我插入一个新的付款,脚本会向所有管理员用户发送一个通知: function insert
我用 Ubuntu 和 DigitalOcean 构建了一个 droplet,我正在尝试将它配置为使用 SMTP 发送电子邮件。 我知道 DigitalOcean 通过 IPv6 而不是通过 IPv4
我是 PHP 的新手。我从这里下载了一个 phpmailer 脚本(带有文件)-> phpmailer 我正在使用 XAMPP,我将文件定位在: \htdocs\QMS\phpmailer 我的 ph
我这里有一个大问题! 我需要向所有订阅者发送时事通讯(大约 1200) 问题是它只将时事通讯发送给其中的 150-180。 我有一个在 php 中实现的脚本,它使用 PhpMailer() 类将时事通
是否可以使用phpmailer发送异步电子邮件? 常规邮件发送代码段如下: $mail->Send(); PHP在继续之前等待Send()返回结果。是否有可能使phpmailer立即返回结果,而无需等
我有这样一种情况,我发送了两封不同的电子邮件,一封给客户,另一封在成员接受任务后发送给成员。在函数中我调用了 2 个函数,一个发送给客户端,一个发送给成员。发生的情况是第二封电子邮件同时发送给成员(m
我正在使用 PHPMailer在我的网站上,但它返回一个错误: 您必须提供至少一个收件人电子邮件地址。 服务器正在运行 PHP 7。我查看了以下页面以寻找答案: PHP Mailer You must
我正在尝试配置 PHPMailer 我上传了 1 个文件,它是 class.phpmailer.php 并创建了另一个包含以下内容的 php 文件: IsSMTP(); // enable SMTP
使用 PHPMailer 向我的 Gmail 帐户发送电子邮件后,单击“邮件发送者”右侧的“显示详细信息”后,它会显示“yourhostingaccount.com”。这是一张图片: 我读过您可以使用
我是一名优秀的程序员,十分优秀!