sendGrid mail function not working in yii-framewor

2019-06-02 19:05发布

I used below code for sendGrid codes for sending mails from my project.

require_once(YII_BASE_PATH . "/lib/sendgrid-php/SendGrid.php");
require_once(YII_BASE_PATH . "/lib/sendgrid-php/SendGrid_loader.php");   
$sendgrid = new SendGrid('uname', 'pwd');
        $mail = new SendGrid\Mail();
        $mail->addTo('xxxxxxxxxx@gmail.com')->
               setFrom('xxxyyyy5@yahoo.co.in')->
               setSubject('Subject goes here')->
               setText('Hello World!')->
               setHtml('<strong>Hello World!</strong>');
       $sendgrid->smtp->send($mail);

I already downloaded the sendGrid package and put it into lib folder in yii.

if I execute the above code i got error like "include(Swift_DependencyContainer.php): failed to open stream: No such file or directory"

if I included the above file i got error like another file need to be include.

Kindly advice on this.

标签: php yii sendgrid
3条回答
2楼-- · 2019-06-02 19:26

Here is what works for me:

// Define constant which SendGrid uses for referencing the path
define('ROOT_DIR', Yii::app()->basePath . '/lib/sendgrid-php/');
// Prevent swift_required from executing
define('SWIFT_REQUIRED_LOADED', true);

// Import SendGrid and Swift libraries
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);

// Register namespace
Yii::setPathOfAlias('SendGrid', Yii::app()->basePath . '/lib/sendgrid-php/SendGrid/');
查看更多
Viruses.
3楼-- · 2019-06-02 19:26

finally i make it works. for your reference i list down the steps (for myself also),

1) we need to download the sendgrid-php pack from https://github.com/sendgrid/sendgrid-php/downloads

2) Unzip the folder and placed in your project folder like " app/mail/".

3) the create one .php file for mail for mail sending in that folder like " app/mail/mail.php ".

4)in that file,

    <?php
        session_start();
        define("ROOT_DIR", __dir__ . DIRECTORY_SEPARATOR);

        function sendGrid_loader($string) {
            if (preg_match("/SendGrid/", $string)) {
                $file = str_replace('\\', '/', "$string.php");
                require_once ROOT_DIR . $file;
            }
        }

        spl_autoload_register("sendGrid_loader");

        $sendgrid = new SendGrid('sendgrid_username', 'sendgrid_password');
        $mail = new SendGrid\Mail();
    $mail->addTo('foo@bar.com')->
           setFrom('me@bar.com')->
           setSubject('Subject goes here')->
           setText('Hello World!')->
           setHtml('<strong>Hello World!</strong>');
?>

5) i need to send mail when i redirect to mailsend page. so i write code in controller file in Actionmailsend(),

" header("Location:".AT::getUrl()."/mail/mail.php"); ".

just redirection. that's it. mail send successfully.

  • here AT::getUrl() - used for get baseurl.

  • it's not integrated to yii. we used mail functionality by to place the sendGrid package folder into inside the yii project folder and used it.

查看更多
forever°为你锁心
4楼-- · 2019-06-02 19:27

It seems that SendGrid relies on include path to load its dependencies. So you must use one or several

Yii::setPathOfAlias()
Yii::import()

statements to add SendGrid to the include path. Maybe :

Yii::setPathOfAlias('SendGrid', YII_BASE_PATH'.'/lib/sendgrid-php');
Yii::import('SendGrid.*');

See : http://www.yiiframework.com/doc/api/1.1/YiiBase#import-detail

I use Zend_Mail instead of SendGrid, but I had the same kind of include path problem. I've solved it by using these statements :

Yii::setPathOfAlias('zf', '/path/to/zend/library/folder');
Yii::import('zf.*');
Yii::import('zf.Zend.Loader.Autoloader', true);
Yii::registerAutoloader(array('Zend_Loader_Autoloader', 'autoload'));

I think the solution to your problem is similar.

查看更多
登录 后发表回答