1

プロジェクトからメールを送信するための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"

上記のファイルをインクルードすると、別のファイルをインクルードする必要があるなどのエラーが発生しました。

これについて親切にアドバイスしてください。

4

3 に答える 3

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/');
于 2012-09-28T13:00:32.307 に答える
1

SendGrid は、その依存関係を読み込むためにインクルード パスに依存しているようです。したがって、1つまたは複数を使用する必要があります

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

SendGrid の代わりに Zend_Mail を使用していますが、同じ種類のインクルード パスの問題がありました。これらのステートメントを使用して解決しました:

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'));

あなたの問題の解決策は似ていると思います。

于 2012-08-08T11:14:26.820 に答える
0

最後に私はそれを機能させます。参考までに、手順をリストします(私自身も)、

1) https://github.com/sendgrid/sendgrid-php/downloadsから sendgrid-php パックをダウンロードする必要があります。

2) フォルダーを解凍し、" app/mail/" のようなプロジェクト フォルダーに配置します。

3) 「 app/mail/mail.php 」のように、そのフォルダにメール送信用のメール用の .php ファイルを 1 つ作成します。

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) メール送信ページにリダイレクトするときにメールを送信する必要があります。だから私はActionmailsend()でコントローラーファイルにコードを書きます、

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

ただのリダイレクト。それでおしまい。メール送信成功。

  • ここで AT::getUrl() - baseurl の取得に使用されます。

  • yii には統合されていません。sendGrid パッケージ フォルダを yii プロジェクト フォルダ内に配置して使用することで、メール機能を使用しました。

于 2012-08-09T10:07:04.557 に答える