お知らせ

Movable Type 5 Webサイト製作ガイドVolume 12009年12月7日

Movable Type 5 Webサイト製作ガイドVolume 1」を発売しました。
Movable Type 5を基本からしっかりマスターしたい方のための書籍です。
Movable TypeでWeb製作をされている方などにお勧めです。
PDFによる販売で、当サイトでのみ購入できます(書店では購入できません)

他にも多数書籍を執筆しています。
こちらもぜひご覧ください。

メールフォームプラグインV2.0・その5(メール送信エラーへの対策)

| コメント(14) | トラックバック(0)

メールフォームプラグインV2.0を導入された方の中で、「メールを送信すると『メールを送信することができませんでした。』とエラーが表示された」という方が数名いらっしゃいました。
また、これまでのメールフォームプラグインでも、同様の現象が出た方が数名いらっしゃいます。
このエラーへの対策を解説します。

1.メールフォームプラグインのメール送信の仕組み

メールフォームプラグインでは、Movable Typeのメール送信モジュール(MT::Mail)を使って、メールを送信しています。
また、MT::Mailは、サーバーにインストールされているメールサーバーのプログラム(sendmail等)か、外部のメールサーバーのどちらかに、メール送信を依頼する形を取っています。

「メールを送信することができませんでした。」のエラーメッセージは、メールサーバーがメール送信の処理に失敗したときに表示されます。

2.対策その1・mt-config.cgiの書き換え

上で述べたように、メールの送信は、サーバーにインストールされているメールサーバーのプログラムか、外部のメールサーバーを使って行われます。
そのどちらを使うかは、mt-config.cgi(Movable Typeの設定ファイル)で決まります。

Movable Typeのインストール先ディレクトリに、mt-config.cgiファイルがあります。
そのファイルを開いてみて、以下のような記述があるか、もしくはMailTransferに関する記述が何もない場合は、サーバーにインストールされているメールサーバープログラムが使われます。

MailTransfer sendmail
SendMailPath メールサーバープログラムのパス

一方、以下のような記述があれば、外部のメールサーバーが使われます。

MailTransfer smtp
SMTPServer メールサーバーの名前

ただ、外部のメールサーバーを通してメールを送信することは、現状では多くの場合で無理です。
最近のメールサーバーは、スパムメール等への対策として、「Outbound Port 25 Blocking」(OP25B)という仕組みを導入しています。
ところが、Movable Typeから外部のメールサーバーを通してメールを送信する場合、そのプログラムはOP25Bには対応していません。

したがって、mt-config.cgiに「MailTransfer smtp」の記述がある場合、それを「MailTransfer sendmail」に変更し、また「SendMailPath メールサーバープログラムのパス」の行を追加します。
なお、「メールサーバーのプログラムのパス」は、各レンタルサーバーのヘルプ等のページに、「sendmailのパス」等の形で記載されています。

例えば、「sendmailのパスは『/usr/sbin/sendmail』です。」と記載があるレンタルサーバーの場合、mt-config.cgiに以下の記述を入れます。

MailTransfer sendmail
SendMailPath /usr/sbin/sendmail

なお、自宅サーバーで運用している場合、上記の設定をしても、プロバイダを通る際にOP25Bがかかってしまって、メールが送信できないことがあります。
その場合は、自宅サーバーのメールサーバープログラムに、OP25B対策のための設定を行う必要があります。

2.対策その2・メールの送信元アドレスの変更

対策その1を行ってみても、エラーが出ることもあります。
その場合、お使いのサーバーのメールサーバーのプログラムでは、送信元のメールアドレスに制限がかかっていることが考えられます。

メールフォームプラグインでは、メールフォームで入力されたメールアドレスを送信元として、メールを送信する仕組みを取っています。
送信元のメールアドレスに制限がかかっている場合、メールフォームで入力されたメールアドレスを送信元にすることができずに、送信エラーになります。

この場合は、以下の作業を行ってみてください。

  • レンタルサーバーの設定で、ご自分のドメインのメールアドレスを1つ作成し ます。
    例えば、ブログのアドレスが「http://www.foo.com」の方なら、「○○○@foo.com」のようなメールアドレスを作ります。
    また、すでに作成してあるなら、そのメールアドレスを使うこともできま す。
  • メールフォームの設定で、「基本設定」の「送信先のメールアドレス」の欄に、 上で作成したメールアドレスを入力します。
  • メールフォームプラグインのlib/MailForm.pmをメモ帳等で開きます。
  • MailForm.pmの340行目付近に、以下のような部分があります。
    # send mail
    $head{To} = $tmail;
    $head{From} = $email;
    my $mtmpl = MT::Template->new;
    
    この部分を以下のように書き換えて、MailForm.pmをアップロードし直します。
    # send mail
    $head{To} = $tmail;
    $head{From} = $tmail;
    $head{'Reply-To'} = $email;
    my $mtmpl = MT::Template->new;
    

3.詳細なエラーメッセージの表示

上記の2つの対策を行っても、状況が改善しないこともあります。
その場合、送信エラー時に詳細なエラーメッセージを表示するようにしてみてください。
エラーメッセージを見れば、何らかの対策を考えられるかも知れません。

まず、lib/MailForm.pmの351行目を、以下のように書き換えてください。

書き換え前
push @errmsg, $app->plugin->translate('Sending mail failed.');
書き換え後
push @errmsg, $app->plugin->translate('Sending mail failed.') . ' : ' . MT::Mail->errstr;

また、368行目でも上と同じ書き換えを行います。
書き換えが終わったら、MailForm.pmをアップロードし直します。

ただし、エラーメッセージを見ても、サーバーの設定等が原因で、こちらではどうにもできないこともあり得ます。
その場合は、申し訳ありませんが、当プラグインではメールの送信を行うことはできません。

トラックバック(0)

トラックバックURL: http://www.h-fj.com/mt/mt-tb.cgi/1199.

コメント(スレッド6件,コメント14件)

コメントはスレッド表示になっています。
また、スレッドの先頭のコメントに対する返信には、先頭に矢印を表示しています。

No.1 りか : (無題)

藤本さま
早速対応してくださり、ありがとうございます。
1と2の対策をしましたら 送信できました。
ほんとにありがとうございました。

No.2 sinnchan : 無事送信できました!

Fujimoto 様
先日は質問させていただき、失礼しました。
早速掲載していただいたエントリの内容を拝見し、対策をしたところ、無事メールを送信できました。
今回はお世話になり、ありがとうございました。

No.3  : (無題)

>りかさん、sinnchanさん
こんにちは。

お二人とも無事メールを送信できるようになったとのことで、良かったです。

No.4 seki : V1.30における対策その2について

はじめまして。sekiと申します。
メールフォームプラグイン バージョンは、V1.30を使わせていただいています。
記載にありますV2.0で発生しているのと同様のメールが送信されな現象が発生
しております。

確認/エラー/送信完了については問題なく動作するのですが、メールが送信
されな状態です。記載にあります通り、おそらくサーバ側の原因ではないかと
思われますので、記載にあります対策その2を実施しようと思うのですが、
V1.30とV2.0では、MailForm.pmの記載が若干異なるようです。申し訳ありませ
んがV1.30におけるMailForm.pmの修正方法についてお教え願えませんでしょう
か。
よろしくお願い致します。

No.5  : Re:V1.30における対策その2について

>sekiさん
こんにちは。

V1.30では、345行目付近を以下の赤字のように書き換えてください。

# else {
$head{From} = $to;
$head{'Reply-to'} = $email
# }

No.8 Wanch! : メールフォームプラグインV2.10の送信エラーについて

先日、メールフォームプラグインV2.10をダウンロードさせていただき、早速テストを行ったのですが、送信時にエラーが表示され、メールが送られない状況です。

状況としては、以下の感じです。

1)送信ボタンをクリック

2)エラーが表示される
エラーの内容(実際には文字化けして表示されますが、shift-jisに変えると以下の文章になります)
-------------------------
サーバの内部エラー
サーバの内部でエラーまたは設定上の問題が発生したため、リクエストを処理できませんでした。このディレクトリへの CGI アクセスが有効にされているかどうか、サーバの管理者にご確認ください。
-------------------------

3)記入したメールアドレスには、確認メールが届く
4)送信先のメールアドレスにはメールが届かない
5)MTのログには「メールフォームからメールが送信されました(自動返信も送信)」が追加される

2の対策を施すにも表記内容が違うようで、どこをいじっていいのかが分かりません。
メールフォームプラグインV2.10ではどのように設定すればよいのでしょうか?

ちなみにMTOS4.2を使用しています。
確認メールは届くので、sendmailもcgiも動いてるように思うのですが…

他に考えられる対策が有ればお教えいただけますでしょうか?

No.9  : Re: メールフォームプラグインV2.10の送信エラーについて

>Wanch!さん
こんにちは。

4番の問題の対策ですが、メールフォームの設定の「詳細設定」のところにある「送信元のメールアドレス」で、「以下のメールアドレス」をオンにして、お使いのサーバーでのメールアドレスを指定してみてください。

ただ、「サーバの内部エラー」の原因はまた別です。
そちらのサーバーでプラグインの動作をデバッグしてみないと、原因は分からないと思います。

No.10 Wanch! : Re: メールフォームプラグインV2.10の送信エラーについて

早速ご回答いただきありがとうございます。

送信元のメールアドレスの設定では解決しなかったため、送信予定ではない別ドメインのアドレスを指定したところ、無事送信できました。

しかし、CCやBCCに送信したいアドレスを設定すると「サーバの内部エラー」が発生してしまいます。

とりあえず、別ドメインでアドレスを新規に作成し、転送する方法をとりました。

どうやらサーバ側の問題のようですね。
レンタルサーバの方に問い合わせしてみます。

No.11 道 : (無題)

ご教授お願いいたします。

メールフォームプラグイン2.0は
IISサーバでも動作可能でしょうか?

このページの
「2.対策その1・mt-config.cgiの書き換え」に
ある通りにパスを変更したのですが、
送信エラーがでてしまいます。

SendMailPathの書き換えも、
smtp Pathの書き換えも駄目でした。

ちなにみサーバはアイルの
Infinito(インフィニート)になります。

どうぞ宜しくお願いいたします。

No.12  : (無題)

>道さん
こんにちは。

アイルのヘルプによると、メール送信にはsendmailの代わりにsendmane.exeを使うそうです。

http://winfaq.isle.jp/FaqItem?i_faqId=275&i_categoryId=532

以下のページにsendmane.exeの設定方法の解説があります。

http://homepage1.nifty.com/yito/anhttpd/faq/sendmane.html

上記の設定をした後、mt-config.cgiに以下のように書けば、メールを送信できるようになるかと思われます。

MailTransfer sendmail
SendMailPath c:\sendm\sendmane.exe

No.13 道 : (無題)

壱様

お返事ありがとうございます。

そうなんです!
「c:\sendm\sendmane.exe」
の対応もしたのですが送信できなくて・・・・。

というか、インストールすると自動的に
MailTransfer sendmail
SendMailPath c:\sendm\sendmane.exe
になってました。

なので、IISでは動かないのかと
お手上げ状態だったんです。

この外に、注意する所は無いでしょうか?

宜しくお願い申し上げます。

No.14  : (無題)

>道さん
こんにちは。

設定しても動かないとなると、申し訳ありませんが、そちらのサーバーでプラグインの動作を追ってみないと、原因は分からないと思います。

No.15 道 : (無題)

壱様

お返事ありがとうございます。

了解いたしました。

もうちょっと奮闘してみます。

ありがとうございました。

No.16 初心者 : (無題)

>道様

Infinitoで道様と同じことで悪戦苦闘しました。
確信は持てなかったのでしすが、以下の修正でInfinito環境でもメールが飛ぶということで試してみてうまくいきました。

MailForm.pm(コメントアウト部分を若干修正)

# $head{To} = \@tmail;
# $head{Cc} = \@tmail_cc if ($tmail_cc);
# $head{Bcc} = \@tmail_bcc if ($tmail_bcc);
$head{To} = join(', ', @tmail);
$head{Cc} = join(', ', @tmail_cc) if ($tmail_cc);
$head{Bcc} = join(', ', @tmail_bcc) if ($tmail_bcc);

理由はよくわかりません。

コメントする