概要
マルチサイトでユーザーを追加したところ、ネットワーク管理者の画面から追加しても、各サイトから追加しても、新規の場合は500 Internal Server Errorになります。
エラーが出ていますが、ユーザーは登録されていました。
メールは管理者には届いているけれど、登録されたユーザには届きませんでした。
条件を整理して、何が原因かをつきとめて対応しました。
簡単にまとめると、こんな感じです。
Webサーバはさくらインターネット、メールサーバはGoogle Appsを利用しています。
ユーザが追加されると、管理者と本人にメールを出します。
Webサーバから同じドメイン名(マルチドメインで利用している場合はそのドメインも)を持つメールアドレスにメールを出すときに、DNSを参照せずに内部処理を行っていると思われます(ログ見ていませんが状況から)。
さくらのサーバ内には該当するメールアドレスが無いので、sendmailでエラーが出て、500 Internal Server Errorとなりました。
管理者のメールアドレスはGoogle Appsの管理外だったので、メールが届いていました。
目次
1.システム構成
- WordPress
- 3.1.3 マルチサイト(サブドメディレクトリ型、サブドメイン型の両方とも現象が出ました)
- Webサーバ
- さくらのレンタルサーバ スタンダードを独自ドメインで運用
- ドメイン管理
- お名前.com
- メール
- ユーザーとして追加したのはGoogle Apps,Gmail
2.登録するメールアドレスによって現象が異なる
Gmail(ドメインが@gmail.com)のメールアドレスや、携帯メールのアドレスを登録するときは、エラーは発生せずユーザー登録が完了し、登録されたアドレスにメールが届きました。
WordPressで作ったサイトのURLを「http://example1.com」として、メールアドレス「user@example1.com」をGoogle Appsで管理しているとすると、「user@example1.com」を登録するときに500 Internal Server Errorとなりました。
また、さくらのレンタルサーバ内で「http://example2.com」をマルチドメインとして管理していて、「user@example2.com」をGoogle Appsで管理しているとすると、WordPressで作ったサイト「http://example1.com」に「user@example2.com」を登録するときにも500 Internal Server Errorとなりました。
3.”Google Apps” “PHPMailer” “さくら”で調べてみると
こちらのページを見つけました。
確かに「dead.letter」に送信されなかったメールの情報が書き込まれています。
まず、wp-includes/pluggable.phpをエディタで開き、次のように修正します。
381行目あたりの$phpmailer->IsMail();を$phpmailer->IsSMTP();に変更します。
中略
そして、wp-includes/class-phpmailer.phpを開き、165行目から始まるSMTP設定の変数を次のように変更します。
に従って修正すると、エラーが発生することなくユーザ登録が完了しました。
登録したメールアドレスにメールも届いてます。
Pleskでサーバ管理していたときも、確かにこういう現象が発生していました。
共有サーバなのでログを自分で見たりはできないし、サポートにも確認していませんが、恐らく似たようなことが起こっていると想像できます。
4.プラグインを入れる
とりあえずコアファイルをいじりましたが、アップグレードで戻ってしまうのを避けるため、プラグインを探しました。
情報源はこちら。
マルチサイトの場合、各サイトごとにプラグインを有効化して「設定 > Cimy Swift SMTP」で設定を行います。
ネットワークにユーザを追加する場合は、blogid=1のサイトのCimy Swift SMTP設定が適用されます。
とても参考になりました。ありがとうございます
今 試作中のサイトが全く同じ環境で(さくら、googleApps、マルチ)同じ事象がおこり困っていたので、とても参考になりました ありがとうございます
お役に立つことができて、うれしいです!