4

是否可以在 PHP 中准备一封电子邮件(发件人、收件人、主题、正文、附件),而不是直接使用 PHP 发送,而是使用客户的电子邮件程序(Thunderbird / Outlook / ...)打开它?

我的上下文是:

  • 在表单中,用户选择“收件人”联系人和要发送的文件(正文是预定义的文本)
  • 在提交时,我希望准备好的电子邮件显示在他最喜欢的邮件客户端中,以便他可以修改它(添加抄送,修改正文,...)

如果可能,该怎么做?

4

3 回答 3

2

我会做这样的事情:

  • 从表格中收集信息
  • 提交表单时处理数据
  • 向用户提供一个链接,并使用该mailto:方案添加变量。

例如,在 PHP 中是这样的:

if(isset($_POST['send_mail']))
{
    $to = $_POST['email_to'];
    $subject = $_POST['email_subject'];
    $body = 'This would be your defined body...';

    // Now prepare the URL and present it to the user:
    $url = 'mailto:'.$to.'?subject='.rawurlencode($subject).'&body='.rawurlencode($body);
    echo '<a href="'.$url.'" title="Send Email Now">Send Email</a>';

    // A boolean value to hide the form
    // Necessary logic would need to be implemented on the page for this
    $show_form = false;
}

您的表单可能如下所示:

<form method="post">
    <label for="select_email_to">Recipient:</label>
    <select name="email_to" id="select_email_to">
        <option value="someone@example.com">John Doe</option>
        <option value="someone.else@example.com">Jane Doe</option>
        <otion value="a.n.other@example.com">Foo Bar</otion>
    </select>
    <label for="input_subject">Subject</label>
    <input type="text" name="subject" id="input_subject" />

    <input type="submit" name="send_mail" value="Prepare Email" />
</form>

如果您需要包含文件,我会在提交表单时将其上传到服务器,然后在电子邮件正文中包含指向上传文件的链接。

于 2013-01-24T12:46:00.857 回答
0

mailto: URL 方案显示了如何创建指向新电子邮件的链接。浏览器/操作系统将在电子邮件客户端中打开此电子邮件。

https://www.rfc-editor.org/rfc/rfc2368

于 2013-01-24T12:03:24.157 回答
0

谢谢大家的回答。

不幸的是(实际上并不令人惊讶),不可能将附件数据放入 mailto 链接(duh)!

然后有2个解决方案:

  1. 如果您确实需要打开客户端的电子邮件软件,请准备一个 mailto,其中包含指向邮件正文中文件的直接链接。为此,您需要将文件存储在收件人可以通过该直接链接访问的位置。
  2. 如果您无法将文件存储在收件人可访问的位置(例如,您的应用程序是防火墙后的内部网应用程序),那么唯一的解决方案是直接通过 PHP 发送电子邮件,而不使用客户端软件。
  3. 或者你可以先通过PHP把邮件发给发件人,他自己再转发给收件人,这样他就可以随意修改邮件了。但这对于未经培训的用户来说有点令人困惑......

干杯!

于 2013-01-25T17:24:17.803 回答