メールフォームプラグイン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をアップロードし直します。
ただし、エラーメッセージを見ても、サーバーの設定等が原因で、こちらではどうにもできないこともあり得ます。
その場合は、申し訳ありませんが、当プラグインではメールの送信を行うことはできません。









コメントはスレッド表示になっています。
また、スレッドの先頭のコメントに対する返信には、先頭に矢印を表示しています。
藤本さま
早速対応してくださり、ありがとうございます。
1と2の対策をしましたら 送信できました。
ほんとにありがとうございました。
Fujimoto 様
先日は質問させていただき、失礼しました。
早速掲載していただいたエントリの内容を拝見し、対策をしたところ、無事メールを送信できました。
今回はお世話になり、ありがとうございました。
>りかさん、sinnchanさん
こんにちは。
お二人とも無事メールを送信できるようになったとのことで、良かったです。
はじめまして。sekiと申します。
メールフォームプラグイン バージョンは、V1.30を使わせていただいています。
記載にありますV2.0で発生しているのと同様のメールが送信されな現象が発生
しております。
確認/エラー/送信完了については問題なく動作するのですが、メールが送信
されな状態です。記載にあります通り、おそらくサーバ側の原因ではないかと
思われますので、記載にあります対策その2を実施しようと思うのですが、
V1.30とV2.0では、MailForm.pmの記載が若干異なるようです。申し訳ありませ
んがV1.30におけるMailForm.pmの修正方法についてお教え願えませんでしょう
か。
よろしくお願い致します。
>sekiさん
こんにちは。
V1.30では、345行目付近を以下の赤字のように書き換えてください。
# else {
$head{From} = $to;
$head{'Reply-to'} = $email
# }
先日、メールフォームプラグインV2.10をダウンロードさせていただき、早速テストを行ったのですが、送信時にエラーが表示され、メールが送られない状況です。
状況としては、以下の感じです。
1)送信ボタンをクリック
2)エラーが表示される
エラーの内容(実際には文字化けして表示されますが、shift-jisに変えると以下の文章になります)
-------------------------
サーバの内部エラー
サーバの内部でエラーまたは設定上の問題が発生したため、リクエストを処理できませんでした。このディレクトリへの CGI アクセスが有効にされているかどうか、サーバの管理者にご確認ください。
-------------------------
3)記入したメールアドレスには、確認メールが届く
4)送信先のメールアドレスにはメールが届かない
5)MTのログには「メールフォームからメールが送信されました(自動返信も送信)」が追加される
2の対策を施すにも表記内容が違うようで、どこをいじっていいのかが分かりません。
メールフォームプラグインV2.10ではどのように設定すればよいのでしょうか?
ちなみにMTOS4.2を使用しています。
確認メールは届くので、sendmailもcgiも動いてるように思うのですが…
他に考えられる対策が有ればお教えいただけますでしょうか?
>Wanch!さん
こんにちは。
4番の問題の対策ですが、メールフォームの設定の「詳細設定」のところにある「送信元のメールアドレス」で、「以下のメールアドレス」をオンにして、お使いのサーバーでのメールアドレスを指定してみてください。
ただ、「サーバの内部エラー」の原因はまた別です。
そちらのサーバーでプラグインの動作をデバッグしてみないと、原因は分からないと思います。
早速ご回答いただきありがとうございます。
送信元のメールアドレスの設定では解決しなかったため、送信予定ではない別ドメインのアドレスを指定したところ、無事送信できました。
しかし、CCやBCCに送信したいアドレスを設定すると「サーバの内部エラー」が発生してしまいます。
とりあえず、別ドメインでアドレスを新規に作成し、転送する方法をとりました。
どうやらサーバ側の問題のようですね。
レンタルサーバの方に問い合わせしてみます。
ご教授お願いいたします。
メールフォームプラグイン2.0は
IISサーバでも動作可能でしょうか?
このページの
「2.対策その1・mt-config.cgiの書き換え」に
ある通りにパスを変更したのですが、
送信エラーがでてしまいます。
SendMailPathの書き換えも、
smtp Pathの書き換えも駄目でした。
ちなにみサーバはアイルの
Infinito(インフィニート)になります。
どうぞ宜しくお願いいたします。
>道さん
こんにちは。
アイルのヘルプによると、メール送信には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
壱様
お返事ありがとうございます。
そうなんです!
「c:\sendm\sendmane.exe」
の対応もしたのですが送信できなくて・・・・。
というか、インストールすると自動的に
MailTransfer sendmail
SendMailPath c:\sendm\sendmane.exe
になってました。
なので、IISでは動かないのかと
お手上げ状態だったんです。
この外に、注意する所は無いでしょうか?
宜しくお願い申し上げます。
>道さん
こんにちは。
設定しても動かないとなると、申し訳ありませんが、そちらのサーバーでプラグインの動作を追ってみないと、原因は分からないと思います。
壱様
お返事ありがとうございます。
了解いたしました。
もうちょっと奮闘してみます。
ありがとうございました。
>道様
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);
理由はよくわかりません。