2015-04-03 3 views
1

Я использую SMTP-расширения PHPMailer в Yii по адресу http://www.yiiframework.com/extension/smtp-mail/ и успешно отправил почту, создав из нее функцию sentMail в контроллере. Но в целом это требует от меня конфиг в главном/config.php, как это:динамическая настройка smtp отправлять почту в yii

'Smtpmail'=>array(
     'class'=>'application.extensions.smtpmail.PHPMailer', 
     'Host'=>"smtp.gmail.com", 
     'Username'=>'[email protected]', 
     'Password'=>'password here', 
     'Mailer'=>'smtp', 
     'Port'=>587, 
     'SMTPAuth'=>true, 
     'SMTPSecure' => 'tls', 
    ), 

Как я могу получить всю конфигурацию из базы данных для настройки SMTP? Я попытался записать в функции init() и _constructor(), но это не работает. И я даже конфигурирую функцию mailSend в контроллере следующим образом:

public function mailsend($to, $from = '', $from_name, $subject, $message, $cc = array(), $attachment = array()) { 
    $mail = Yii::app()->Smtpmail; 
    $mail->Host = Smtpconfig::model()->findByPk(1)->host; 
    $mail->Username = Smtpconfig::model()->findByPk(1)->username; 
    $mail->Password = Smtpconfig::model()->findByPk(1)->matkhau; 
    $mail->IsSMTP = true; 
    $mail->Port = Smtpconfig::model()->findByPk(1)->port; 
    $mail->SMTPSecure = Smtpconfig::model()->findByPk(1)->phuongthuc; 
    $mail->SetFrom($from, $from_name); 
    $mail->Subject = $subject; 
    $mail->MsgHTML($message); 
    $mail->AddAddress($to, ""); 
    $mail->CharSet = "utf-8"; 

    // Add CC 
    if (!empty($cc)) { 
     foreach ($cc as $email) { 
      $mail->AddCC($email); 
     } 
    } 

    // Add Attchments 
    if (!empty($attachment)) { 
     foreach ($attachment as $attach) { 
      $mail->AddAttachment($attach); 
     } 
    } 

    if (!$mail->Send()) { 
     return false; // Fail echo "Mailer Error: " . $mail->ErrorInfo; 
    } else { 
     return true; // Success 
    } 
} 

Но не работайте. (Smtpconfig - это название модели, включая информацию о почте admin smtp)

+0

Посмотрите на [Заводской шаблон метода] (https://en.wikipedia.org/wiki/Factory_method_pattern#PHP). Возможно, это то, что вы ищете. – Tom

+0

Можете ли вы помочь мне более четко? –

ответ

1

Держу пари, что это твоя проблема: $mail->IsSMTP = true. IsSMTP - это метод, и вы назначаете ему значение. Имя вводит в заблуждение, поскольку оно на самом деле инструктирует почтовую программу использовать smtp. Попробуйте $mail->IsSMTP() или $mail->Mailer = 'smtp'. В противном случае, я думаю, вы на правильном пути.

Смежные вопросы