Cloud RunのLaravelからSendGridにメール送信する際にエラー

Failed to authenticate on SMTP server with username "hoge" using 2 possible authenticators. Authenticator LOGIN returned Expected response code 250
  • ローカルでSTGと同じMAILのenv情報を使った場合はエラーにならない(普通にメール送信できる)
  • ということは、環境差分?
  • 上記のエラーになるってことは、多分SendGridのサーバーまではリクエストは届いてる
  • そこの認証がうまくいってなさそう
  • MAILパスワード等は合っているので、SendGrid側の許可IP(ホワイトリスト)にSTGのCloud Runからのリクエストを受け取っているCloud NatのIPが入っていない可能性
  • ホワイトリストリストには入っていたが、Cloud Runの 「ネットワーキング > VPC > トラフィック」 の設定が、「プライベート IP へのリクエストのみを VPC にルーティングする」になっていた
  • VPCコネクタ経由の通信になっていない
  • つまり、そもそもCloud RunからSendGridにアクセスする際に、Cloud NatのIPが使われていなかった
  • Cloud Runのservice.ymlに以下の対応が必要
apiVersion: serving.knative.dev/v1
kind: Service
metadata:
  name: my-app
spec:
  template:
    metadata:
      annotations:
        run.googleapis.com/vpc-access-egress: all-traffic
    spec:
      timeoutSeconds: 60
  • これにより、外部トラフィックへの送信が全てVPCコネクタを通るようになり、SendGridへの送信元IPがNAT IPになる
  • デフォルトだと、SendGridへの通信が(VPCコネクタを経由せずに)インターネットに直接送信されていた