Post

[Ghost] Mailgun/AWS SESを設定し、メンバー加入を有効化する

前提

Mailgunにアカウントを作成

Mailgunにドメインを登録後、DNSサーバーのレコードを登録し、認証を終える

apiコードを発行し、ghostの設定画面に入力する


デフォルト状態では会員加入ができなくなっています。新規登録を行うと、以下のエラーが出ます。 Failed to send magic link email この問題は、メール転送機能を有効化しないと認証メールが送れないから発生する可能性があります。

したがって、Lightsailインスタンスにアクセスし、設定ファイルを確認します。

1
$ sudo vim /bitnami/ghost/config.production.json 

内部のmailのところを注目してください。

1
2
3
  "mail": {    
      "transport": "Direct"  
  },

こうなっていたと思います。これをmailgunのところのoverviewのSMTPを確認します。 SMTPを押すと以下の値が確認できます。

1
2
3
4
5
6
Grab your SMTP credentials:
SMTP hostname: ***
Port: ***
Username: ***
Default password:
***

これをメモして、以下のjsonに代入します。

1
2
3
4
5
6
7
8
9
10
11
12
"mail": {
  "transport": "SMTP",
  "options": {
    "service": "Mailgun",
    "host": "smtp.mailgun.org",
    "port": 587,
    "secure": true,
    "auth": {
      "user": "postmaster@your_domain.com",
      "pass": "your_password"
    }
  }

ここに、値を入れて保存します。

これで解決できるはずですが、ここら辺の問題は割と多いらしく、僕の方でも解消できませんでした。Mailgunの無料プランでは登録されていないアドレス宛に送信することができず、メンバーを手動で登録した後、そのメールアドレスで送信することはできます。しかし、そのままではダメなので、Mailgunのプランをアップグレードするか、代替のものを用意しなければなりません。Mailgunの最低金額は35ドル(2023/12/05基準)なので割と高めでした。

1
{"name":"Log",... "statusCode":500,"level":"normal","message":"Failed to send email. Reason: Data command failed: 421 Domain mg.jhblog.jp is not allowed to send: Free accounts are for test purposes only. Please upgrade or add the address to authorized recipients in Account Settings..","help":"\"Please see https://ghost.org/docs/config/#mail for instructions on configuring email.\"","stack":"Error: Data command failed: 421 Domain mg.jhblog.jp is not allowed to send: Free accounts are for test purposes only. Please upgrade or add the address to authorized recipients in Account Settings.\n    at createMailError (/opt/bitnami/ghost/versions/5.72.1/core/server/services/mail/GhostMailer.js:68:12)\n    at SMTPConnection._formatError (/opt/bitnami/ghost/versions/5.72.1/node_modules/nodemailer/lib/smtp-connection/index.js:790:19)\n    at SMTPConnection._actionDATA (/opt/bitnami/ghost/versions/5.72.1/node_modules/nodemailer/lib/smtp-connection/index.js:1656:34)\n    at SMTPConnection.<anonymous> (/opt/bitnami/ghost/versions/5.72.1/node_modules/nodemailer/lib/smtp-connection/index.js:1628:26)\n    at SMTPConnection._processResponse (/opt/bitnami/ghost/versions/5.72.1/node_modules/nodemailer/lib/smtp-connection/index.js:953:20)\n    at SMTPConnection._onData (/opt/bitnami/ghost/versions/5.72.1/node_modules/nodemailer/lib/smtp-connection/index.js:755:14)\n    at SMTPConnection._onSocketData (/opt/bitnami/ghost/versions/5.72.1/node_modules/nodemailer/lib/smtp-connection/index.js:193:44)\n    at TLSSocket.emit (node:events:517:28)\n    at addChunk (node:internal/streams/readable:335:12)\n    at readableAddChunk (node:internal/streams/readable:308:9)\n    at Readable.push (node:internal/streams/readable:245:10)\n    at TLSWrap.onStreamRead (node:internal/stream_base_commons:190:23)","hideStack":false},"msg":"Failed to send email. Reason: Data command failed: 421 Domain mg.jhblog.jp is not allowed to send: Free accounts are for test purposes only. Please upgrade or add the address to authorized recipients in Account Settings..","time":"2023-12-04T14:16:01.338Z","v":0}

エラー文面


それで僕はAWSのSESを使って変更を行いました。

SESから資格証明を入力し、ドメインを登録します。 次にCNAMEコードなどを入力するところがあり、LightsailのDNS設定から追加します。5分程度待ったら、認証が完了したとのメールが届きます。 最後に、SMTP設定というところで、専用のユーザーを作成します。この際に発行されるidとpwをメモしておいてください。

その後、ghostのconfigを変更します。

1
2
3
4
5
6
7
8
9
10
11
12
  "mail": {     
    "transport": "SMTP",    
    "options": {
      "service": "SES",
      "host": "[リージョンのホスト]", 
      "port": 2465,"secure": true,
      "auth": {
        "user": "[ユーザーid]",
        "pass": "[ユーザーpw]"    
        }    
      }  
    },

インスタンスを再起動します。 無事成功しました まだダメでしたら、もしかしたらAWSのSESがSandboxになっているからかもしれません。この場合は登録されたメンバーにしか送れませんので、Sandboxの解除を申し込めば大丈夫になります。以下の記事を参考にしてください。 [

[AWS] SESサンドボックスからプロダクションへの移行

SESの設定を完了するとデフォルトサンドボックスにいる状態になります。 プロダクションの申請を行うと、サポートケースが生成されます。 ここから自動配信でその目的が聞かれます。 最初、短くかつ簡単に Ghostブログを使用しております。会員加入にメールアドレスを通した認証が必要なので、そのためのメールサーバーとしてSESを使用したいと考えております。 と書いたのですが、拒否されました。おそらく、スパムメールなど信頼性を低めるようなメール配信を低減するための措置だと考えられます。

追記します。

この設定を行なってもニュースレターはMailgunを設定しないと送信できません。なので、加入のみできることになります。

This post is licensed under CC BY 4.0 by the author.