如何在 laravel 中转发电子邮件?

Posted

技术标签:

【中文标题】如何在 laravel 中转发电子邮件?【英文标题】:How can I forward an email in laravel? 【发布时间】:2020-10-01 09:30:44 【问题描述】:

我正在使用https://github.com/Webklex/laravel-imap 从我的邮件服务器中检索电子邮件。

现在我需要转发所有正文(文本、html、附件)的确切邮件。如何转发邮件?

【问题讨论】:

【参考方案1】:

当然可以,我建议您使用: Laravel Mail Auto Embed

它的使用很简单,你正常写你的markdown:

<!-- eg: resources/vendor/mail/markdown/order-shipped.blade.php -->
@component('mail::message')
# Order Shipped

Your order has been shipped!

@component('mail::button', ['url' => $url])
View Order
@endcomponent

Purchased product:

![product](https://domain .com/products/product-1.png)

Thanks,<br>
 config('app.name') 
@endcomponent

当您发送电子邮件时,它会替换内联数据的 url 图像,最简单的处理和转发电子邮件

发送时会替换正常生成的链接:

<img src="https://example.com/products/product-1.png">
by an embedded inline attachment of the image:

<img src="cid:3991f143cf1a86257f8671883736613c@Swift.generated">

【讨论】:

我使用 imap 从我的邮箱中检索了电子邮件,我想使用 smtp 将电子邮件转发到其他地址。我想你的答案不是我想要的。如果是,请描述一下我该怎么做? @AzizAhmed 你必须重新制作电子邮件,自动嵌入更容易将附件引用移动到 blob 以将它们附加到电子邮件中(而不是硬引用)【参考方案2】:

我会给你想法

首先,您需要获取从 laravel-imap 获取的电子邮件数据并存储在变量中

首先您需要指定想要的消息假设您正在寻找包含可以指定的特定信息的消息 像这样

foreach($aFolder as $oFolder)
    //Get all messages by custom search criteria
    /** @var \Webklex\IMAP\Support\MessageCollection $aMessage */
    $aMessage = $oFolder->query()->where(["CUSTOM_Word" => "Hello"]])->get();
    

现在您有了一封包含所有组件的特定电子邮件

现在将其发送到所需的电子邮件或电子邮件列表(使用 foreach)

然后将 $aMessage 变量传递给您的发送函数

    $receiver_email = 'john@gmail.com';
    $data = array ('subject' => '$aMessage->getSubject().'<br />'' ,
     'Attachments' => '$aMessage->getAttachments()->count().'<br />'',
     'body' => '$aMessage->getHTMLBody(true)';
   )
    Mail::send('emails.message', $data, function ($message) 
       $message->to($receiver_email)
               ->subject($aMessage->getSubject());
       $message->from('youremail@app.com' , 'your name')
    );

并且在您的电子邮件/消息中不要忘记将带有主题、附件和正文的自定义消息作为输出

在电子邮件/消息中,它将是发送给客户端的消息,您可以使用 html 、 css 来设计它,就像它使用 laravel 刀片模板的任何其他文件一样,这里是来自 Medium 的示例

Hello <strong> $subject</strong>
<p>$body</p>

注意:您可能会发现一些拼写错误或错误,因为就像我告诉您的那样,我给了您想法,但不能准确地给您想要的。

和here你可以找到另一个关于发送电子邮件的问题,你可能想看看它

【讨论】:

您还可以在发送函数中获取您的特定电子邮件,这样您就不必将 $oMessage 传递给它 “emails.message”是一个视图?我对吗?如果我是对的,你能分享一个视图样本吗? 是的,我会从 Medium 网站分享你可能想看看我也会分享的链接【参考方案3】:
Mail::send( ['html' => 'emails.newinvoice'], ['text' => $emailtext], 
//           ^^^^

还将模板中的自动转义块 替换为未转义的 !! !!

<p> !! $text !! </p>

【讨论】:

【参考方案4】:

我也在做同样的事情,想给出一个更具体的答案,与使用 Laravel-IMAP 获取电子邮件然后转发它们有关。

See this answer which helped out a lot.

use Illuminate\Mail\Mailable;

public function build()

  $this->view('emails.emails.received')->with('body', $this->message->getHTMLBody())
       ->from($this->message->getFrom()->first()->mail, $this->message->getFrom()->first()->personal)
       ->to('<forwarded_email>')
       ->replyTo($this->message->getReplyTo()->first()->mail, $this->message->getReplyTo()->first()->personal)
       ->subject($this->message->getSubject());

  foreach ($this->message->getAttachments() as $attachment) 
    $this->attach($attachment);
  

  $this->withSwiftMessage(function ($msg) 
    $msg->getHeaders()->addTextHeader('In-Reply-To', $this->message->getMessageId());
    $msg->getHeaders()->addTextHeader('references', $this->message->getReferences());
  );

  return $this;

另外 - 我的模板 emails.emails.received 仅包含以下内容: !! $body !!

【讨论】:

以上是关于如何在 laravel 中转发电子邮件?的主要内容,如果未能解决你的问题,请参考以下文章

Laravel 添加 ?发邮件

利用Laravel自带的Mail类发邮件

Linux搭建smtp服务器+laravel5.2发邮件配置

21-py3 发邮件

laravel 队列使用(发邮件短信等)

Selenium 2自动化测试实战37(自动发邮件功能)