ホームページ > バックエンド開発 > PHPチュートリアル > Laravelアプリケーションへの電子メールを配管します

Laravelアプリケーションへの電子メールを配管します

Joseph Gordon-Levitt
リリース: 2025-02-22 10:34:10
オリジナル
599 人が閲覧しました

Piping Emails to a Laravel Application

コアポイント

  • Laravelのコマンドラインツールの職人を拡張して、RAWメールを受信し、アプリケーションで使用することができます。これには、IOストリームから元のメッセージを取得するために職人に登録および実行できるphp artisan email:parseなどの新しいコマンドを作成することが含まれます。
  • 元のメッセージを別のセクションに解決するには、php-mime-mail-parserなどを使用します。これにより、電子メールの件名や本文などのヘッダーを取得できます。解析されたメールは、データベースに簡単に保存できます。
  • この設定は、メッセージ内の添付ファイルも処理することもできます。添付ファイルを取得した後、ファイルシステムオブジェクトを作成してサーバー上にファイルを保存できます。さらに、使用するツールまたはメールサーバーに応じて、さまざまな方法を使用してアプリケーションにメールを配信できます。

はじめに

プロジェクト管理またはサポート管理ツールでこれを頻繁に表示します。メールに返信でき、Webアプリケーションに自動的に表示されます。これらのツールは、これらの電子メールをシステムに直接インポートすることができます。

この記事では、Laravel 4アプリケーションにメールを配信する方法を学びます。これを行うために、以下に示すように作曲家を介してインストールされた真新しいLaravel 4プロジェクトから始めました。

composer create-project laravel/laravel your-project-name --prefer-dist
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー

職人コマンドを作成します

アプリケーションにメールをインポートできるようにするには、コマンドラインを介してアプリケーションにメールを配信する必要があります。幸いなことに、Laravelには、複数のタスクを実行できるArtisanというコマンドラインツールがあります。 Artisanが実行できるすべてのタスクのリストを表示するには、プロジェクトのルートディレクトリで

を実行できます。 php artisan list

この場合、非常に具体的なタスクを実行してほしいです。元のメールを受け入れて、アプリケーションで使用します。残念ながら、これはArtisanが処理できる基本的な機能の1つではありません。新しいコマンドで簡単に拡張できます:

。その後、職人を開始し、この場合はphp artisan email:parseと呼ばれる特定のタスクを実行します。 email:parse

最初のステップは、このコマンドを作成することです。 Artisan自身のコマンドを介して新しいコマンドを作成して、新しいコマンドを作成できます。プロジェクトのルートディレクトリで次のコマンドを実行するだけです。

すべてがうまくいった場合、
php artisan command:make EmailParserCommand
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
ディレクトリに

という名前のファイルが見つかります。お気に入りの編集者で開き、app/commandsおよびEmailParserCommand.phpプロパティを表示します。必要に応じてカスタマイズできます。明確な名前と説明を与えることにより、コマンドは職人コマンドリストによくリストされます。 $name たとえば、$descriptionこれを変更しました:

/**
 * 控制台命令名称。
 *
 * @var string
 */
protected $name = 'email:parse';

/**
 * 控制台命令描述。
 *
 * @var string
 */
protected $description = '解析传入的电子邮件。';
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
注文の登録

プロジェクトのルートでphp artisan email:parseを実行すると、このコマンドがまだ登録されていないことを示すメッセージが表示されます。次のステップは、このコマンドが職人に登録されていることを確認することです。 app/start/artisan.phpファイルを開き、ファイルの最後にArtisan::add(new EmailParserCommand);を追加して、新しく作成したコマンドを登録しましょう。これで、リストしたコマンドを再度実行して、リストしたコマンドを表示できます。ここに記入した名前と説明が表示されることに注意してください。 list email:parse

元のメールを取得

職人を通じてコマンドが呼び出されるときはいつでも、常に

メソッドを呼び出します。そのため、最初はここにメールの解析を追加する必要があります。電子メールは現在IOストリームにあり、

から取得できます。このIOストリームを開き、ストリーム全体を読むまで少量のメールを収集します。 fire php://stdin

職人に送信された電子メールは、
composer create-project laravel/laravel your-project-name --prefer-dist
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
変数にあります。ヘッダー、本体、添付ファイルを含む電子メール全体です。

$rawEmail

スケジュールメール

元のメールがありますが、メールを複数の部品に分割することを好みます。トピックや電子メールなどのヘッダーを取得したいです。これらすべての部品を分割するために独自のコードを作成できますが、誰かがアプリケーションで使用できるパッケージを作成しました。このパッケージは、メール全体を論理部品に分割することができます。次の行を

ファイルに追加して実行します

composer.json composer update

ここで、このパッケージをコマンドで実際に使用できることを確認する必要があります。そのため、もう一度
php artisan command:make EmailParserCommand
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
を開き、次の行を上部に追加します。

app/command/EmailParserCommand.php元のメールを別々のセクションに解析できます。次のコード行を

メソッドの最後に追加します。
/**
 * 控制台命令名称。
 *
 * @var string
 */
protected $name = 'email:parse';

/**
 * 控制台命令描述。
 *
 * @var string
 */
protected $description = '解析传入的电子邮件。';
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー

fire最初に新しいパーサーを作成します。次に、元のメールをパーサーのテキストに設定し、最後に、さまざまな異なる方法を呼び出して、ヘッダーまたはボディからデータを取得します。

/**
 * 执行控制台命令。
 *
 * @return void
 */
public function fire()
{
    // 从 stdin 读取
    $fd = fopen("php://stdin", "r");
    $rawEmail = "";
    while (!feof($fd)) {
        $rawEmail .= fread($fd, 1024);
    }
    fclose($fd);
}
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
データベースにメールを簡単に保存できるようになりました。たとえば、電子メールエンティティがある場合は、このようなデータベースにメールを保存できます。

添付ファイルの処理

"messaged/php-mime-mail-parser": "dev-master"
ログイン後にコピー
ログイン後にコピー

サーバー上にメールに添付された添付ファイルを保存することもできます。電子メールパーサークラスは、利用可能な添付ファイルを処理できます。まず、次の行をクラスの上部に再度追加します。

app/command/EmailParserCommand.phpメソッド:

を拡張する必要があります
composer create-project laravel/laravel your-project-name --prefer-dist
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー

この部分が実際に何をするか見てみましょう。最初の行は、電子メールから添付ファイルを取得します。 $attachments変数は、アタッチメントオブジェクトの配列です。次に、サーバーにファイルの保存を処理する新しいFiles -Systemオブジェクトを作成します。次に、すべての添付ファイルを繰り返し始めます。ファイルのパスとコンテンツを受け入れるFiles -Systemオブジェクトのputメソッドを呼び出します。この場合、ファイルをディレクトリに追加し、添付ファイルが実際に持っているファイル名を使用します。 2番目のパラメーターは、実際のファイルのコンテンツです。 public/uploads

それだけです!あなたのファイルは

に保存されます。正しい権限を設定して、メールサーバーがこのディレクトリに実際にファイルを追加できることを確認してください。 public/uploads

メールサーバーを構成します

これまでのところ、メール全体を準備して、メールを取得、分割、保存しました。ただし、新しく作成された職人コマンドに実際にメールを送信する方法がわからない場合は、このコードは役に立たない。

以下に、使用しているツールまたはメールサーバーに応じて、アプリケーションに電子メールを配信するさまざまな方法があります。たとえば、

にあるアプリに転送したいと思います。 以下に示す実際のコマンドでは、開発マシンで行うように職人が実行されることを確認するために、毎回

を追加しました。生産環境にいる場合は、このセクションを削除できます。 support@peternijssen.nl /var/www/supportcenter cpanel--env=local

CPANELを使用している場合は、一般メニューのフォワーダーをクリックできます。新しいフォワーダーを追加し、アプリケーションに転送するアドレスを定義します。 [詳細設定]をクリックして、[Pipe to Programs]オプションを選択します。 入力フィールドでは、次の行を挿入できます。

CPANELはホームディレクトリに対するパスを使用していることに注意してください。

exim
php artisan command:make EmailParserCommand
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー

eximでは、ファイルを開きます

。 このファイルには、次の行が存在することを確認してください。

Aliasデータベースを再構築します。 /etc/valiases/peternijssen.nl

postfix
/**
 * 控制台命令名称。
 *
 * @var string
 */
protected $name = 'email:parse';

/**
 * 控制台命令描述。
 *
 * @var string
 */
protected $description = '解析传入的电子邮件。';
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
ファイルに存在し、コメントされていないことを確認してください。 newaliases

ファイルを変更する必要がある場合は、

を実行してポストフィックスをリロードしてください。

アプリケーションに渡される新しいエイリアスを作成できるようになりました。 /etc/postfix/main.cfを開いて、次の行を追加します:

/**
 * 执行控制台命令。
 *
 * @return void
 */
public function fire()
{
    // 从 stdin 读取
    $fd = fopen("php://stdin", "r");
    $rawEmail = "";
    while (!feof($fd)) {
        $rawEmail .= fread($fd, 1024);
    }
    fclose($fd);
}
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー

service postfix reload Aliasデータベースを再構築します。

sendmail/etc/aliases

sendmailを使用すると、最初に
"messaged/php-mime-mail-parser": "dev-master"
ログイン後にコピー
ログイン後にコピー
ファイルにエイリアスを作成する必要があります:

newaliases

Aliasデータベースを再構築します。次に、職人ファイルのchmodが755であることを確認して、実行できるようにします。

最後に、職人ファイルとPHP自体を< /etc/smrsh

qmail
composer create-project laravel/laravel your-project-name --prefer-dist
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー

インストールに応じて、次のファイルが存在することを確認する必要があります。

または:

php artisan command:make EmailParserCommand
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー

ファイルを開き、コンテンツとして次の行を追加します。

/**
 * 控制台命令名称。
 *
 * @var string
 */
protected $name = 'email:parse';

/**
 * 控制台命令描述。
 *
 * @var string
 */
protected $description = '解析传入的电子邮件。';
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー

結論

/**
 * 执行控制台命令。
 *
 * @return void
 */
public function fire()
{
    // 从 stdin 读取
    $fd = fopen("php://stdin", "r");
    $rawEmail = "";
    while (!feof($fd)) {
        $rawEmail .= fread($fd, 1024);
    }
    fclose($fd);
}
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー

利用可能なコマンドラインツールを備えたフレームワークは、メールを処理できます。ここで提供されるコードは、基本的なセットアップにすぎません。プロジェクトに応じて、特定のメールアドレスがアプリにメールを送信することを許可するだけかもしれません。アプリケーションに渡す前に、Postfixなどのツールでメールをフィルタリングしていることを確認してください。 ある種のチケットシステムを使用する場合は、電子メールの件名からサポートチケットIDを簡単に抽出し、そのIDに基づいて電子メールで複数の異なるアクションを実行することができます。

メールサーバーのログファイルに注意を払ってください。実際のパイプラインがそれを解決する方法に失敗した場合、いくつかのヒントを提供します。

(スペースの制限により、FAQの一部は省略されています。元のFAQSコンテンツは記事のトピックに弱く関連しており、コンテンツの一部は記事のコンテンツと複製されているため、擬似はありません。 - オリジナル処理が実行されます

以上がLaravelアプリケーションへの電子メールを配管しますの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート