Yii,Yiimailer不发送邮件(未显示错误)

时间:2014-05-05 00:50:00

标签: php yii

我正在尝试发送邮件。我想使用Gmail服务器发送,现在我只想让它从发送到同一个帐户发送。

我正在使用YiiMailer扩展,因为它似乎很容易使用,这是我在我的控制器中的操作:

public function actionContact()
    {
        $model=new ContactForm;
        if(isset($_POST['ContactForm']))
        {
            $model->attributes=$_POST['ContactForm'];
            if($model->validate())
            {
                $name='=?UTF-8?B?'.base64_encode($model->name).'?=';
                $subject='=?UTF-8?B?'.base64_encode($model->subject).'?=';
                $headers="From: $name <{$model->email}>\r\n".
                    "Reply-To: {$model->email}\r\n".
                    "MIME-Version: 1.0\r\n".
                    "Content-Type: text/plain; charset=UTF-8";

                // mail(Yii::app()->params['adminEmail'],$subject,$model->body,$headers);

                $mail = new YiiMailer('contact', array(
                    'message'=>$model->body,
                    'name'=>$model->name,
                    'description'=>'Contact form'
                ));

                $mail->setFrom($model->email, $model->name);
                $mail->setSubject($model->subject);
                $mail->setTo(Yii::app()->params['adminEmail']);

                $mail->isSMTP();
                $mail->host = "smtp.gmail.com";
                $mail->port = 465;
                $mail->Username = "username@gmail.com";
                $mail->Password = "password";

                if($mail->send())
                {
                    Yii::app()->user->setFlash('contact','Gracias por contactarnos, te responderemos tan pronto como podamos.');
                    $this->refresh();
                }

                else
                {
                    Yii::app()->user->setFlash('error','Error enviando correo.');
                    $this->refresh();
                }
            }
        }
        $this->render('contact',array('model'=>$model));
    }

adminMail与account@gmail.com相同

我不知道我是否有正确的gmail设置,我确定该功能的条件不存在所以它什么都不做。

只是为了确保。这是我的配置:

// autoloading model and component classes
    'import'=>array(
        'application.models.*',
        'application.components.*',
        'ext.YiiMailer.YiiMailer'
    ),

PD:我在帖子周围找到了gmail设置。我不确定他们是否改变了设置。

3 个答案:

答案 0 :(得分:2)

尝试使用方法getError()找出错误是什么(您可以使用特殊的调试选项来获取有关可能错误的更多信息)

$mail->SMTPDebug = 1; //optional

if($mail->send())
{
    Yii::app()->user->setFlash('contact','Gracias por contactarnos, te responderemos tan pronto como podamos.');
    $this->refresh();
}
else
{
    echo '<pre>';
    var_dump($mail->getError());
    echo '</pre>';
    exit;
}

另外,请尝试以下方法:

  • ADD $mail->SMTPSecure = 'ssl';或$mail->SMTPSecure = 'tls';
  • ADD $mail->SMTPAuth = true;

这个问题让您感兴趣:send email using Gmail SMTP server through PHP Mailer

答案 1 :(得分:0)

这对我有用!

            $mail = new YiiMailer();
            $mail->IsSMTP();                                      // Set mailer to use SMTP
            $mail->Host = 'smtp.gmail.com';  // Specify main and backup server
            $mail->SMTPAuth = true;                               // Enable SMTP authentication
            $mail->Username = 'username';                            // SMTP username
            $mail->Password = 'password';                           // SMTP password
            $mail->SMTPSecure = 'tls';                            // Enable encryption, 'ssl' also accepted
            $mail->Port = 587;
                        //set mail properties
            $mail->setFrom('username@gmail.com', 'YYY');

        $mail->setTo($model->to_email);

        $mail->setSubject($model->subject);
        $mail->setBody($model->message, 'text/html');

        $mail->send();

使用Gmail发送电子邮件时,您需要将smtpauth设置为true。执行操作后,请检查您的sendMail框!

答案 2 :(得分:0)

我通过安装stunnel解决了这个问题,因此启用了openssl并允许我从服务器发送电子邮件