2017-09-27 118 views
0

嗨我试图做一个表格,可以发送电子邮件使用yii/mail,问题是我只能发送一种形式成为文本正文,我已经编码这样的模型如何发送多个settextbody yii2发送邮件

 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) 

BEC在我看来,我有几个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;} 

感谢安高尔·加和PRATIK Karmakar

+0

准备电子邮件的身体befroe调用 - > setTextBody($ this-> body),然后设置为$ this-> body –

+0

如果您说先准备好电子邮件正文,那么如何将2个变量(body和gender)合并为一个变量(body)? –

+1

正文是一个字符串。试试这个 $ this-> body。= $ this-> gender; –

回答

2

很好的做法,把你的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> 
+0

感谢您的答案,但我没有使用renderpartial,而是我用 - > compose(“file_name”,['body'=> $ this-> body,'gender'=> $ this-> gender] ,...),谢谢你帮我 –

+0

没问题。随时欢迎 !! –

1

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

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'。

+0

)?或者参数应该用“file_name”更改? –

+0

不,您可以删除选项setTextBody,因为现在不需要它。像在渲染文件 –

+1

时所做的那样,将所有参数传递给“file_name”,谢谢,这也是正确答案,但其他答案给出了“file_name”示例,但仍然是正确答案,所以我投票赞成,谢谢 –