前提・実現したいこと
お世話になっております。
SendGridのAPIを使用したトランザクションメール(メールアドレス認証を想定)を
ターミナルのphpコマンド以外から実行し送信したいです。
ユーザメールアドレス入力
↓
メールアドレスが登録済みでなければパスコード付き認証メールを送信
という流れで考えているのですが、
条件を満たしたときに
require_once('メール送信ファイル');
ではエラーが出てしまいました。
401 Array ( [0] => HTTP/1.1 401 Unauthorized [1] => Server: nginx [2] => Date: Tue, 13 Jul 2021 05:42:14 GMT [3] => Content-Type: application/json [4] => Content-Length: 88 [5] => Connection: keep-alive [6] => Access-Control-Allow-Origin: https://sendgrid.api-docs.io [7] => Access-Control-Allow-Methods: POST [8] => Access-Control-Allow-Headers: Authorization, Content-Type, On-behalf-of, x-sg-elas-acl [9] => Access-Control-Max-Age: 600 [10] => X-No-CORS-Reason: https://sendgrid.com/docs/Classroom/Basics/API/cors.html [11] => Strict-Transport-Security: max-age=600; includeSubDomains [12] => [13] => ) {"errors":[{"message":"Permission denied, wrong credentials","field":null,"help":null}]}
また、エラー内の文章には下記のように書かれていたのですが、
脆弱性のない書き方はないのでしょうか?
phpファイル内からexec関数を使い、メール送信の条件が揃ったときに送信ができるようにできるのではないかと思い試してみましたがうまくいきませんでした。
exec関数以外でも大丈夫ですので、ターミナルのphpコマンド以外でメール送信ができる方法があれば教えていただきたいです。
試したこと
ドキュメント
こちらのphpコマンドでメールを送信する方法ではきちんとメールの送信が送れるのですが、
コマンドは使わずphpファイルのみで実行する方法がわかりません。
※ ドキュメントだけでは理解できず、こちらの記事も参考にさせていただきました。
自分なりに探してみたところ、
外部コマンドを実行できるexec関数がヒットしたので、こちらを利用して下記を試しました。
該当のソースコード
php
1<?php 2$cmd1 = 'source .env'; 3exec($cmd1); 4 5$cmd2 = 'cat .env'; 6exec($cmd2, $arr2, $res2); 7var_dump($arr2); 8var_dump($res2); 9 10$cmd3 = 'echo $SENDGRID_API_KEY'; 11exec($cmd3, $arr3, $res3); 12var_dump($arr3); 13var_dump($res3); 14 15$cmd4 = 'php test.php'; 16exec($cmd4, $arr4, $res4); 17var_dump($res4); 18?> 19 20//出力結果 21array(1) { [0]=> string(95) "export SENDGRID_API_KEY='********'" } int(0) array(1) { [0]=> string(0) "" } int(0) int(255) 22
コマンドでは、
$source .env $echo $SENDGRID_API_KEY // APIキー出力 $php test.php 202 Array ( [0] => HTTP/1.1 202 Accepted [1] => Server: ,,, [2] => Date: Thu, 08 Jul 2021 03:48:34 GMT [3] => Content-Length: 0 [4] => Connection: keep-alive [5] => X-Message-Id: ,,,, [6] => Access-Control-Allow-Origin: https://sendgrid.api-docs.io [7] => Access-Control-Allow-Methods: POST [8] => Access-Control-Allow-Headers: Authorization, Content-Type, On-behalf-of, x-sg-elas-acl [9] => Access-Control-Max-Age: 600 [10] => X-No-CORS-Reason: https://sendgrid.com/docs/Classroom/Basics/API/cors.html [11] => Strict-Transport-Security: max-age=600; includeSubDomains [12] => [13] => )
となり、メールはきちんと届きます。
ですが、ファイルからの実行になると、
$echo $SENDGRID_API_KEY
が実行できていません。
補足情報(FW/ツールのバージョンなど)
ちなみにphpファイルにそのまま書く方法も試したのですが、エラーが出ます。
401 Array ( [0] => HTTP/1.1 401 Unauthorized [1] => Server: 、、、 [2] => Date: Thu, 08 Jul 2021 04:10:24 GMT [3] => Content-Type: application/json [4] => Content-Length: 88 [5] => Connection: keep-alive [6] => Access-Control-Allow-Origin: https://sendgrid.api-docs.io [7] => Access-Control-Allow-Methods: POST [8] => Access-Control-Allow-Headers: Authorization, Content-Type, On-behalf-of, x-sg-elas-acl [9] => Access-Control-Max-Age: 600 [10] => X-No-CORS-Reason: https://sendgrid.com/docs/Classroom/Basics/API/cors.html [11] => Strict-Transport-Security: max-age=600; includeSubDomains [12] => [13] => ) {"errors":[{"message":"Permission denied, wrong credentials","field":null,"help":null}]}
契約中のサーバー上にgithub上のファイルをアップして行ったのですが、こちらもあっているのでしょうか?
phpのif文の中にメール送信するコードを書く予定なのですが、
そのようなコードを書いている人が見つけられず、困っています。。
APIを使用した経験があまりないのでめちゃくちゃな書き方をしていると思うのですが
どうかご教授いただけますと大変助かります。m(_ _)m
拙い文章を最後まで読んでいただきありがとうございました。
何卒よろしくお願いいたします。
- php
- SendGrid
- Xサーバー
回答1件
あなたの回答
tips
プレビュー