发送带附件的电子邮件

5

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

因此,我正在寻找一种从Drupal中适当地发送带附件的电子邮件的解决方案。Mime Mail似乎过于复杂,因为不需要HTML邮件、模板和其它功能。但是我唯一能看到的另一种选择是在我的hook_mail()实现中处理邮件时设置适当的标头并将附加的文件序列化到邮件正文中。

我错过了什么吗?有没有处理这个问题的模块?


1
我只想补充一下,当你添加附件时,邮件将被作为 MIME 邮件发送。因此,HTML 部分并不是“多余的”,它可能只是与附件代码相同的代码。 - Emil Vikström
我不需要/想要邮件正文为HTML格式,我只需要/想要带附件的纯文本电子邮件。其它任何东西都超出了范围,我不想被要求处理它。 - Pierre Buyle
根据这里的结果:http://meta.stackexchange.com/questions/110752/should-we-migrate-questions-to-an-on-topic-site-if-the-asker-requests,您可以决定再次标记它。暂时不予处理。 - Sam Saffron
5个回答

4

Mimemail是最简单的解决方案。无论是否过度,只需一个函数调用即可完成。

如果您坚持自己做,您可以使用自制附件发送程序:对附件进行Base64编码,将它们添加到电子邮件正文中,添加正确的标题即可。


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

关键是将$plaintext参数设置为TRUE。现在你可以既拥有蛋糕,又能吃掉它。

1
您可以查看Swift Mailer模块,该模块可让您发送HTML(MIME)电子邮件、带有内联图像的电子邮件和带有附件的电子邮件。它还能够根据HTML电子邮件版本自动生成纯文本版本,最终让用户的电子邮件客户端显示首选版本(HTML或纯文本)。Swift Mailer模块可在http://drupal.org/project/swiftmailer上获得。顺便说一下:我是该模块的作者和维护者。

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

Webform 模块允许您创建一个表单,并具有可用作附件的文件选项。所有可用的表单组件都列在该模块的手册页面上。

安装 Webform 后,它将显示为一种内容类型。一旦您保存了基本信息,例如标题和电子邮件地址,您就可以添加所需的表单组件。

添加一个“文件”类型的组件,确保选中了“电子邮件”(发送给收件人)选项,然后您就可以自定义允许的文件类型、扩展名、大小和上传文件夹。


是的,我知道Webform可以做到。但由于这是一个单一开发者构建的表单,而不是要由站点的最终用户修改,它并不符合基本的Webform使用情况。我想避免为一个单一的表单带来整个可编辑UI表单堆栈的麻烦,因为该表单还有其他进程(各种数据库更新)需要执行。 - Pierre Buyle
当然,你可以简单地不给其他用户管理Webforms的权限:0) - CitrusTree

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接