来自外部来源的电子邮件附件不起作用
Email attachments from outside sources not working
我最近在我们的网站上创建了一个页面,用户可以在其中上传图片并将其通过电子邮件发送到专门为保存上传的文档而设置的电子邮件地址。
我自己对此进行了测试并且它有效,附件按预期到达 gmail。
但是,每当外部人员使用此功能时,当我们尝试打开时,电子邮件中的附件不可用,或者无法加载。
代码分为 2 个文件,一个控制器和一个助手。这是代码(为了节省一些 space 我删除了所有错误检查,但在实际代码中它们仍然存在并且没有发现任何错误):
控制器
$helper = [GET HELPER];
/** Upload the file to a temp location so that we can attach it to an email */
$uploader = new Varien_File_Uploader('filename');
$uploader->setAllowedExtensions(array(
'image/jpeg',
'image/jpg',
'image/png',
'application/pdf'
))
->setAllowRenameFiles(true)
->setFilesDispersion(false);
$path = $helper->getFileStorageLocation(); // Will store files in /tmp
if (!is_dir($path))
{
mkdir($path, 0775, true);
}
$uploader->save($path, $_FILES['filename']['name']);
$result = $helper->sendMail($_FILES['filename']['name']);
if ($result)
{
$uploadSuccess = true;
/** Remove the temp file */
unlink($path . DS . $_FILES['filename']['name']);
}
帮手
/** Declare variables */
$order = Mage::getModel('sales/order')->load($orderId);
$file_incremented_id = $order->getIncrementId();
$copyTo = $this->getCopyTo();
$copyFrom = $this->getCopyFrom();
$subject = 'proof of upload for ' . $file_incremented_id;
$copyTo = explode(',', $copyTo);
$body = '<span>Please see attachment</span>';
$file = $this->getFileStorageLocation() . DS . $filename; // function receives filename from whatever is calling it
$attachment = file_get_contents($file);
$extension = pathinfo($file, PATHINFO_EXTENSION);
if (!$copyTo)
{
return false;
}
$mail = Mage::getModel('core/email_template');
$mail->setSenderName('Uploader');
$mail->setSenderEmail($copyFrom);
$mail->setTemplateSubject($subject);
$mail->setTemplateText($body);
$mail->getMail()->createAttachment(
$attachement,
Zend_Mime::TYPE_OCTETSTREAM,
Zend_Mime::DISPOSITION_ATTACHMENT,
Zend_Mime::ENCODING_BASE64,
$file_incremented_id . '.' . $extension // Set order number as file name
);
try
{
$mail->send($copyTo);
return true;
}
catch (Exception $e)
{
return false;
}
任何人都可以看到任何可能导致问题的原因,或者根据我对设置的解释想到它可能是什么吗?
所以问题最终是文件大小。我没有发布 $_FILES 变量是我的错。
我稍后看到它,变量有 error = 1,这意味着文件的大小大于 php.ini
中的 max_upload_filesize 所允许的大小
我最近在我们的网站上创建了一个页面,用户可以在其中上传图片并将其通过电子邮件发送到专门为保存上传的文档而设置的电子邮件地址。
我自己对此进行了测试并且它有效,附件按预期到达 gmail。
但是,每当外部人员使用此功能时,当我们尝试打开时,电子邮件中的附件不可用,或者无法加载。
代码分为 2 个文件,一个控制器和一个助手。这是代码(为了节省一些 space 我删除了所有错误检查,但在实际代码中它们仍然存在并且没有发现任何错误):
控制器
$helper = [GET HELPER];
/** Upload the file to a temp location so that we can attach it to an email */
$uploader = new Varien_File_Uploader('filename');
$uploader->setAllowedExtensions(array(
'image/jpeg',
'image/jpg',
'image/png',
'application/pdf'
))
->setAllowRenameFiles(true)
->setFilesDispersion(false);
$path = $helper->getFileStorageLocation(); // Will store files in /tmp
if (!is_dir($path))
{
mkdir($path, 0775, true);
}
$uploader->save($path, $_FILES['filename']['name']);
$result = $helper->sendMail($_FILES['filename']['name']);
if ($result)
{
$uploadSuccess = true;
/** Remove the temp file */
unlink($path . DS . $_FILES['filename']['name']);
}
帮手
/** Declare variables */
$order = Mage::getModel('sales/order')->load($orderId);
$file_incremented_id = $order->getIncrementId();
$copyTo = $this->getCopyTo();
$copyFrom = $this->getCopyFrom();
$subject = 'proof of upload for ' . $file_incremented_id;
$copyTo = explode(',', $copyTo);
$body = '<span>Please see attachment</span>';
$file = $this->getFileStorageLocation() . DS . $filename; // function receives filename from whatever is calling it
$attachment = file_get_contents($file);
$extension = pathinfo($file, PATHINFO_EXTENSION);
if (!$copyTo)
{
return false;
}
$mail = Mage::getModel('core/email_template');
$mail->setSenderName('Uploader');
$mail->setSenderEmail($copyFrom);
$mail->setTemplateSubject($subject);
$mail->setTemplateText($body);
$mail->getMail()->createAttachment(
$attachement,
Zend_Mime::TYPE_OCTETSTREAM,
Zend_Mime::DISPOSITION_ATTACHMENT,
Zend_Mime::ENCODING_BASE64,
$file_incremented_id . '.' . $extension // Set order number as file name
);
try
{
$mail->send($copyTo);
return true;
}
catch (Exception $e)
{
return false;
}
任何人都可以看到任何可能导致问题的原因,或者根据我对设置的解释想到它可能是什么吗?
所以问题最终是文件大小。我没有发布 $_FILES 变量是我的错。
我稍后看到它,变量有 error = 1,这意味着文件的大小大于 php.ini
中的 max_upload_filesize 所允许的大小