我在下面的代码中使用sendGrid代码从我的项目发送邮件。
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);
我已经下载了sendGrid包并将其放入yii中的lib文件夹中。
如果我执行上面的代码,我会得到"include(Swift_DependencyContainer.php): failed to open stream: No such file or directory"
如果我包含上述文件,我会收到错误,因为需要包含另一个文件。
请就此提出建议。
答案 0 :(得分:1)
似乎SendGrid依赖于include路径来加载其依赖项。所以你必须使用一个或几个
Yii::setPathOfAlias()
Yii::import()
将SendGrid添加到包含路径的语句。也许:
Yii::setPathOfAlias('SendGrid', YII_BASE_PATH'.'/lib/sendgrid-php');
Yii::import('SendGrid.*');
请参阅:http://www.yiiframework.com/doc/api/1.1/YiiBase#import-detail
我使用Zend_Mail而不是SendGrid,但我有同样的包含路径问题。 我使用这些陈述解决了这个问题:
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'));
我认为您的问题的解决方案是类似的。
答案 1 :(得分:1)
这对我有用:
// 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/');
答案 2 :(得分:0)
最后我让它成功了。供你参考我列出了步骤(对我自己而言),
1)我们需要从https://github.com/sendgrid/sendgrid-php/downloads
下载sendgrid-php包2)解压缩文件夹并将其放在项目文件夹中,如“app / mail /".
3)为该文件夹中的邮件发送邮件创建一个.php文件,如“app / mail / mail.php”。
4)在该文件中,
<?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)我需要在重定向到mailsend页面时发送邮件。所以我在Actionmailsend(),
中的控制器文件中编写代码" header("Location:".AT::getUrl()."/mail/mail.php"); ".
只是重定向。而已。邮件发送成功。
这里AT :: getUrl() - 用于获取baseurl。
它没有集成到yii。我们使用邮件功能将sendGrid包文件夹放入yii项目文件夹中并使用它。