4

我正在尝试在 yii php 框架中使用 SendGrid 发送邮件。

这是我发送邮件的操作代码:

public function actionSendmail()
{
    Yii::setPathOfAlias('Libs', Yii::app()->basePath.'/lib');
    Yii::setPathOfAlias('SendGrid', Yii::app()->basePath.'/lib/sendgrid-php/SendGrid');
    Yii::import('SendGrid.*');
    Yii::import('Libs.sendgrid-php.SendGrid', true);
    $sendgrid = new SendGrid('uname', 'pwd');
    $mail = new SendGrid\Mail();
    $mail->addTo('to-email')->
        setFrom('from-email')->
        setSubject('Subject goes here')->
        setText('Hello World!')->
        setHtml('<strong>Hello World!</strong>');
    $sendgrid->smtp->send($mail);
    $this->render('mail');
}

显示错误:

使用未定义的常量 ROOT_DIR - 假定为“ROOT_DIR”

/var/www/apsiap/protected/lib/sendgrid-php/SendGrid/Smtp.php(18)

06 {
07   //the available ports
08   const TLS = 587;
09   const TLS_ALTERNATIVE = 25;
10   const SSL = 465;
11 
12   //the list of port instances, to be recycled
13   private $swift_instances = array();
14   protected $port;
15 
16   public function __construct($username, $password)
17   {
18     require_once ROOT_DIR . 'lib/swift/swift_required.php';
19     call_user_func_array("parent::__construct", func_get_args());
20 
21     //set the default port
22     $this->port = Smtp::TLS;
23   }
24 
25   /* setPort
26    * set the SMTP outgoing port number
27    * @param Int $port - the port number to use
28    * @return the SMTP object
29    */
30   public function setPort($port)

如何解决这个问题?

4

3 回答 3

3

知道了:

    public function actionSendmail()
    {
        define('ROOT_DIR', Yii::app()->basePath . '/lib/sendgrid-php/');
        define('SWIFT_REQUIRED_LOADED', true);
        Yii::import('application.lib.sendgrid-php.SendGrid');
        Yii::import('application.lib.sendgrid-php.lib.swift.classes.Swift', true);
        Yii::registerAutoloader(array('Swift', 'autoload'));
        Yii::import('application.lib.sendgrid-php.lib.swift.swift_init', true);
        Yii::setPathOfAlias('SendGrid', Yii::app()->basePath . '/lib/sendgrid-php/SendGrid/');

        $sendgrid = new SendGrid('uname', 'pwd');
        $mail = new SendGrid\Mail();
        $mail->addTo('to-email')->
            setFrom('from-email')->
                    setSubject('Subject goes here')->
            setText('Hello World!')->
            setHtml('<strong>Hello World!</strong>');
        $sendgrid->smtp->send($mail);
        $this->render('mail');
    }
于 2012-11-03T08:22:24.927 回答
0

您有机会查看以下链接吗?主要问题似乎是您导入 SendGrid 库的方式。

于 2012-11-03T06:32:44.577 回答
-1

您不应该以这种方式使用 SendGrid,您必须配置一个类或下载一个已有的扩展并设置为邮件组件,然后您才能轻松发送电子邮件。

不要重新发明轮子:)

于 2020-02-24T12:33:47.137 回答