首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >以HTML为消息发送Codeigniter 4电子邮件

以HTML为消息发送Codeigniter 4电子邮件
EN

Stack Overflow用户
提问于 2022-06-02 08:22:27
回答 3查看 700关注 0票数 1

你能帮我找出一种方法来使用CI4的电子邮件类发送一封以HTML作为消息的电子邮件吗?

在Codeigniter 3中,它很简单,如下所示:

代码语言:javascript
运行
复制
$email->message($this->load->view('html_page_to_send_from_view_folder',$data,true));

但在Codeigniter 4中,我尝试这样做:

代码语言:javascript
运行
复制
$email->setMessage(echo view('html_page_to_send_from_view_folder',$data,true));

它给出了一个错误:

代码语言:javascript
运行
复制
syntax error, unexpected echo(T_ECHO), expecting ')'

我还尝试将视图放入如下变量中:

代码语言:javascript
运行
复制
$echo_page = echo view('html_page_to_send_from_view_folder',$data,true);
$email->setMessage($echo_page);

但它只是抛出了同样的错误,我搜索了所有的互联网和文档,但找不到方法来做这件事。请帮帮忙。

我试过了,但没有出错,也没有收到电子邮件:

代码语言:javascript
运行
复制
$echo_page = view('html_page_to_send_from_view_folder',$data,true);
$email->setMessage($echo_page);
EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2022-06-02 09:13:22

好的,现在我通过添加这个代码$email->setNewLine(“\r\n”)使它工作起来;在setMessage后面的末尾:

代码语言:javascript
运行
复制
$email->setMessage($my_message);    
$email->setNewLine("\r\n");

此外,我还设置了SMTP端口587,而不是465:

代码语言:javascript
运行
复制
$config['SMTPPort']= 587;

另外,对于setMessage,我这样做了:

代码语言:javascript
运行
复制
$my_message = view('html_page_to_send_from_view_folder',["id" => $data['id']]);
$email->setMessage($my_message);

很奇怪的男人..。

票数 0
EN

Stack Overflow用户

发布于 2022-06-02 08:52:16

根据的说法,如果您想使用某个模板作为消息体,您应该这样做:

代码语言:javascript
运行
复制
// Using a custom template
$template = view("email-template", []);
    
$email->setMessage($template);

CodeIgniter 4文档

代码语言:javascript
运行
复制
setMessage($body)
Parameters:  $body (string) – E-mail message body
Returns:     CodeIgniter\Email\Email instance (method chaining)
Return type: CodeIgniter\Email\Email

Sets the e-mail message body:
$email->setMessage('This is my message');
票数 1
EN

Stack Overflow用户

发布于 2022-06-03 00:47:55

A.首先,

而不是:❌

$echo_page = echo view('html_page_to_send_from_view_folder',$data,true);

使用这个:✅

$echo_page = view('html_page_to_send_from_view_folder',$data);

注意echo语句和(而不是)的运气,将true作为https://github.com/codeigniter4/CodeIgniter4/blob/6b215f99897533f9bd4b54b73b53e994111bf744/system/Common.php#L1121 hepler函数的第三个参数传递。

其次,要提交基于HTML的电子邮件,请确保您已将属性设置为html。这可以通过在电子邮件实例上使用setMailType()方法来实现。即:

$email->setMailType('html');

或者,您可以通过向email initialize()方法传递一个首选项值数组来设置“邮件类型”。即:

代码语言:javascript
运行
复制
public function sendMail(): bool
{
    $email = \Config\Services::email();

    $email->initialize([
        'SMTPHost' => 'smtp.mailtrap.io',
        'SMTPPort' => 2525,
        'SMTPUser' => '479d7c109ae335',
        'SMTPPass' => '0u6f9d18ef3256',
        'SMTPCrypto' => 'tls',
        'protocol' => 'smtp',
        'mailType' => 'html',
        'mailPath' => '/usr/sbin/sendmail',
        'SMTPAuth' => true,
        'fromEmail' => 'from@example.com',
        'fromName' => 'DEMO Company Name',
        'subject' => 'First Email Test',
    ]);

    $email->setTo('to@example.com');
    $email->setMessage(view('blog_view'));

    $response = $email->send();

    $response ? log_message("error", "Email has been sent") : log_message("error", $email->printDebugger());

    return $response;

}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/72472989

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档