2017-09-27 7 views
0

Salut j'ai essayé de faire un formulaire qui peut envoyer un courriel en utilisant yii/mail, le problème est que je ne peux envoyer un formulaire pour devenir corps de texte, j'ai le code les modèlescomment envoyer plusieurs settextbody yii2 envoyer un 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; 

     } 
    } 

Comment puis-je utiliser plusieurs paramètres pour

->setTextBody($this->body) 

comme

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

bec Ause en vue que j'ai plusieurs text input et radio list à envoyer comme e-mail, comment puis-je faire cela?

mes attentes sur le message texte sera comme:

name 
gender 
variable 1 
variable 2 
variable n 

RÉSUMÉ modifier = both réponse est correcte mais je l'utilise

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;} 

Merci pour Ankur Garg et Pratik Karmakar

+0

Préparer le corps du courrier électronique befroe appelant -> setTextBody ($ this-> body) et ensuite définir dans $ this-> body –

+0

si vous avez dit de préparer le corps de l'email d'abord, puis comment fusionner 2 variables (corps et sexe) à une variable (corps)? –

+1

body est une chaîne. Essayez ceci $ this-> body. = $ This-> gender; –

Répondre

2

bonnes pratiques pour vous mettre html dans un fichier séparé et préparer le corps de courrier dans ce fichier

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

et la _mail_body.php de contenu sera comme celui-ci

<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

merci pour la réponse, mais je n'ai pas utilisé renderpartial, à la place j'ai utilisé -> composer ("file_name", ['body' => $ this-> body, 'gender' => $ this-> genre] , ...), merci de m'avoir aidé –

+0

Aucun problème. toujours la bienvenue !! –

1

Le meilleur moyen de transmettre plusieurs paramètres est de créer un autre fichier de vue dans le répertoire de messagerie et de transmettre les paramètres.

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(); 

    } 

Note: Créer le fichier 'nom_fichier' dans le répertoire de messagerie.

+0

le settextbody utilise toujours -> setTextBody ($ this-> body)? ou les paramètres devraient être changer avec "nom_fichier"? –

+0

Non, vous pouvez supprimer l'option setTextBody car elle n'est plus requise maintenant. Passez tous les paramètres à la "nom_fichier" comme vous le faites lors du rendu d'un fichier –

+1

merci, c'est aussi la bonne réponse, mais l'autre réponse donne un exemple "nom_fichier", mais c'est la bonne réponse, donc je vote, merci –