2010-08-22 230 views
5

我有一个自定义表单(使用表单API创建),需要通过电子邮件发送上传的文件。当前表单提交处理程序使用drupal_mail()发送没有附件的电子邮件。发送带附件的电子邮件

所以我正在寻找一个解决方案,正确地发送附件从Drupal的电子邮件。 Mime Mail似乎是一种矫枉过正,因为不需要HTML邮件,模板和其他功能。但是我看到的唯一另一种方法是在处理我的hook_mail()实现中的邮件时,设置适当的标题并序列化邮件正文中的附件。

我错过了什么吗?有没有任何模块可以处理这个问题?

+1

我只是想补充一点,当你附加文件时邮件将作为MIME邮件发送。所以HTML部分不是“矫枉过正”,它可能只是与附件代码相同的代码。 – 2010-08-22 15:00:07

+0

我不需要/希望邮件正文在HTML中,我只需要/想要带有附件的纯文本电子邮件。任何事情都超出了范围,我不想被要求处理它。 – 2010-08-22 15:15:03

+0

取决于这里的结果:http://meta.stackexchange.com/questions/110752/should-we-migrate-questions-to-an-on-topic-site-if-the-asker-requests您可能决定再次标记它。现在解散。 – 2011-11-01 04:19:57

回答

3

Mimemail是最简单的解决方案。无论是否矫枉过正,它都可以让你通过一个函数调用来完成它。

如果你坚持,你可能有你自己的attachment sender:base64编码你的附件,将它们添加到邮件正文,添加正确的标题,你就完成了。

0

Webform module允许您创建表单并具有可用作附件的文件选项。所有可用的表格组件都列在模块的manual page上。

安装Webform后将显示为内容类型。一旦保存了基础知识,例如标题和要解决的电子邮件,您就可以添加所需的表单组件。

添加'文件'类型的组件,确保'电子邮件'(收件人)选项打勾,然后您将能够自定义允许的文件类型,扩展名,大小和上传文件夹。

+0

是的,我知道Webform可以做到这一点。但由于这是一个单独的开发人员构建表单,并不是由网站的最终用户修改的,所以它不适合基本的Webform用例。我想避免必须将带有其他进程(各种数据库更新)的Webform的整个UI可编辑表单堆栈带入一个表单。 – 2010-08-22 15:11:16

+0

现在你告诉我们; 0) – CitrusTree 2010-08-22 15:12:27

+0

当然,你可以根本不给其他用户管理Webforms的权限:0) – CitrusTree 2010-08-22 15:18:26

0

您可以使用Zend Framework。

function sendEmail($params){ 
    ini_set('include_path', 'inc/'); 
    require_once ('inc/Zend/Mail.php'); 

    $mail = new Zend_Mail(); 

    $mail->setSubject($params['subject']); 

    $mail->setBodyText($params['bodyText']); 
    $mail->setBodyHtml($params['bodyHtml']); 

    $mail->setFrom($params['fromEmail'], $params['fromName']); 
    $mail->addTo($params['toEmail'], $params['toName']); 

    // Finally, add an attachment 

    assert(file_exists($params['attachFile'])); 

    $at = $mail->addAttachment(file_get_contents($params['attachFile'])); 
    $at->type  = $params['attachType']; 
    $at->disposition = Zend_Mime::DISPOSITION_ATTACHMENT; 
    $at->filename = $params['attachName']; 

    $mail->send(); 
} 
+0

感谢您的更新! – SteAp 2011-11-02 22:02:19

1

您可以使用MIME邮件并强制邮件正文以纯文本格式发送。以下是模块自述文件的摘录:

用法 该模块可能是其他模块需要的,但不是非常有用的 。一旦安装,任何模块可以通过 发送消息调用mimemail()函数:

$sender - a user object, text email address or an array with name, mail 
$recipient - a user object, text email address or an array with name, mail 
$subject - subject line 
$body - body text in HTML format 
$plaintext - boolean, whether to send messages in plaintext-only (default FALSE) 
$headers - a keyed array with headers (optional) 
$text - plaintext portion of a multipart e-mail (optional) 
$attachments - array of arrays with the file's path, MIME type (optional) 
$mailkey - message identifier 

return - an array containing the MIME encoded message 

最关键的事情是设置$明文参数设置为True。现在你可以吃你的蛋糕,也可以吃。

0

您可以随时查看Swift Mailer模块,该模块可让您发送HTML(MIME)电子邮件,带有内嵌图像的电子邮件和带附件的电子邮件。它也可以自动生成基于HTML电子邮件版本的纯文本版本,最终可以让用户的电子邮件客户端显示首选版本(HTML或纯文本)。

斯威夫特梅勒模块可在http://drupal.org/project/swiftmailer

备案:我是该模块的作者和维护者。

相关问题