【问题标题】:How to send multiple settextbody yii2 send mail?yii2如何发送多个settextbody发送邮件?
【发布时间】:2017-09-27 02:33:50
【问题描述】:

您好,我正在尝试制作一个可以使用yii/mail 发送电子邮件的表单,问题是我只能发送一个表单来成为文本正文,我已经编写了这样的模型:

     class CareerForm extends Model

    {

        public $name;

        public $email;

        public $subject;

        public $body;

        public $verifyCode;

        public $gender;

        public function rules()

        {

            return [

            [['name', 'email', 'subject', 'body','gender'], 'required'],

            ['email', 'email'],

            ['verifyCode', 'captcha'],

            ];

         }
         public function career($email)

         {

            if ($this->validate()) {

            Yii::$app->mailer->compose()

                ->setTo($email)

                ->setFrom([$this->email => $this->name])

                ->setSubject($this->subject)

                ->setTextBody($this->body)

                ->send();



            return true;

        }

        return false;

        }
    }

如何使用多个参数来

->setTextBody($this->body)

喜欢

->setTextBody($this->body,$this->gender)

因为我有几个text inputradio list 要作为电子邮件发送,我该怎么做?

我对短信的期望是:

name
gender
variable 1
variable 2
variable n

总结 编辑=两个答案都是正确的,但我使用

public function career($email)
{
    if ($this->validate()) {
        Yii::$app->mailer->compose('filename.html' ,[
            'email' => $this->email,
            'name' => $this->name,
             ])
            ->setTo($email)
            ->setFrom([$this->email => $this->name])
            ->setSubject('career')
            ->send();

        return true;
    }
    return false;}

感谢 Ankur Garg 和 Pratik Karmakar

【问题讨论】:

  • 在调用之前准备邮件正文 ->setTextBody($this->body) 然后设置为 $this->body
  • 如果说先准备邮件正文,那么如何将2个变量(正文和性别)合并为一个变量(正文)?
  • 正文是一个字符串。试试这个 $this->body .= $this->gender;
  • 这几乎是正确的,但是我如何添加空格或
    来分隔每个表单(姓名、性别等)?
  • 您能否将您的期望作为普通文本粘贴到问题中。

标签: php yii yii2 sendmail yii-components


【解决方案1】:

将您的 html 放在单独的文件中并在该文件中准备邮件正文的好习惯

$body = $this->renderPartial('_mail_body.php' .[
                'gender' => $this->gender,
                'name' => $this->name,
    ]);

而_mail_body.php的内容会是这样的

<html>
<body>
<table cellpadding="0" cellspacing="0" align="center"  width="672px" style="font-size:24px; text-align:center;">
<tr>
    <td width="670px" align="center" style="border-left:1px solid #e0e0e0; border-right:1px solid #e0e0e0; font-size:24px; font-family:Arial, Helvetica, sans-serif; padding-top:47px;">
        <table width="608px" cellpadding="0" cellspacing="0" align="center">
            <tr>
                <td width="178px" style="font-family:Arial, Helvetica, sans-serif; font-size:14px; border-right:1px solid #e0e0e0; padding:11px;">
                    Name
                </td>
                <td width="427px" style="font-family:Arial, Helvetica, sans-serif; font-size:14px;padding:11px; color:#4e4e4e;">
                    <?php echo $name;?>
                </td>
            </tr>
            <tr>
                <td width="178px" style="font-family:Arial, Helvetica, sans-serif; font-size:14px; border-right:1px solid #e0e0e0; padding:11px;">
                    Gender
                </td>
                <td width="427px" style="font-family:Arial, Helvetica, sans-serif; font-size:14px;padding:11px; color:#4e4e4e;">
                    <?php echo $gender;?>
                </td>
            </tr>
        </table>
    </td>
</tr>
</table>
</body>
</html>

【讨论】:

  • 感谢您的回答,但我没有使用renderpartial,而是使用了->compose("file_name", ['body' => $this->body,'gender'=>$ this->gender],...),谢谢你帮助我
【解决方案2】:

传递多个参数的最佳方法是在邮件目录中创建另一个视图文件并传递参数。

    public function career($email)
    {
      $message = Yii::$app->mailer->compose("file_name", ['body' => $this->body,'gender'=>$this->gender])
                    ->setTo($email)
                    ->setFrom([$this->email => $this->name])
                    ->setSubject($this->subject)
                    ->setTextBody($this->body)
                    ->send();

    } 

注意:在邮件目录中创建文件“file_name”。

【讨论】:

  • settextbody 还在使用 ->setTextBody($this->body) 吗?或者参数应该用“file_name”改变?
  • 不,您可以删除选项 setTextBody,因为现在不需要它。像渲染文件时一样将所有参数传递给“file_name”
  • 谢谢,这也是正确的答案,但另一个答案给出了一个“文件名”的例子,但这仍然是正确的答案,所以我投票赞成,谢谢
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-06-08
相关资源
最近更新 更多