• ベストアンサー

CGI:メールフォームで500エラーになる

Sendmailを利用したCGIプログラムで、 突然メールフォームが500エラーになるようになりました。 確認画面までは出て、送信ボタンを押すとエラーになります。 いろいろ試したところ、受け取るメールの件名などに、 全角文字を設定するとエラーになるところまでは判明しました。 ※利用しているレンタルサーバーはhetemlです。  新サーバーになってからエラーになるようになりました。 ※プログラムは長く、また複数あるためここに記載は難しいです。  こんな単語の箇所とか、この記述を入れたら・・、などあれば  でご指示いただけると幸いです。 大変漠然な質問で申し訳ないのですが、 回避する方法などアドバイスがあれば教えてください。

質問者が選んだベストアンサー

  • ベストアンサー
  • asciiz
  • ベストアンサー率70% (6803/9674)
回答No.4

>いろいろ試したところ、受け取るメールの件名などに、 >全角文字を設定するとエラーになるところまでは判明しました。 メール送信自体は大概成功していて、そういった特定の現象が確認できるならば、「メールタイトルに入力内容を反映させない」という対処でも良いかもしれません。 暗号化接続部分を追加するのは難しいですが、表示内容を削るだけならばプログラミング素人でも比較的楽でしょう。 例えば、sendmailの前で > subject = argv[3] + "に関するお問い合わせ"; みたいになっていれば、 > subject = "お問い合わせ"; といったように固定文字列にしてしまいます。 題名はメールヘッダに含まれ、日本語文字列の場合には本分とはエンコード処理がされるのですが、そこで何らかのエラーが出ている可能性があります。 エラーが出てスクリプトが止まると、ブラウザ上の表示は500エラーとなってしまいます。 あと想定される部分としては差出人名(From)。 Form: ヘッダの書き方には数種類あり、 (1) From: メールアドレス (2) From: 表示名(コメント) <メールアドレス> (3) From: "表示名" <メールアドレス> といったパターンがあります。 この部分も、フォームで「名前」と「メールアドレス」を入力させているなら、 > from = '"+ name + '" <" + address + '>'; みたいに加工していることが予想されますが、ここも > from = address; だけにすれば、英字しか入らず、妙なエンコードをされることも無いでしょう。(メアドを全角で入れられたりすると困りますが…)

その他の回答 (3)

回答No.3

>いろいろ試したところ、受け取るメールの件名などに、 >全角文字を設定するとエラーになるところまでは判明しました。 メールのヘッダー部分に半角英数文字以外の文字(全角文字や使用不可の半角記号)を含む場合は、SendMailに渡す前に「エンコード」を行う必要があります。 https://www.tohoho-web.com/wwwxx006.htm ヘッダー部分には「Subject(件名)」以外にも「From名(送信元名)」「To名(送信先名)」も含みます。

  • asciiz
  • ベストアンサー率70% (6803/9674)
回答No.2

Webサーバの出す「500エラー」は、単にスクリプトが正常に動かなかった、ということしかわかりません。 使用しているサーバの管理画面などにログインし、エラーログを参照、実際にスクリプトの何行目で止まったのか、あるいはエラーメッセージを出してるのか、確認する必要があります。 でもまあ、メール関連というと、昨今のセキュリティ強化の影響かもしれません。 メールクライアント(今回の質問の場合、メール送信スクリプト)から、メールサーバに接続するときに、暗号化接続しなければ受け付けない、となったサーバが増えて来ているようです。 メールクライアントならば、ちょっと設定項目を変えるだけですけど、スクリプトとなると、暗号化接続の部分を追加しなければいけません。 自分で勉強してプログラム追加するか、暗号化接続に対応した別のスクリプトに乗り換えるなどしなければいけない可能性があります。 今のスクリプト修正は諦めて、Google Form などを使ったお問い合わせ受け付けに変えた方が楽な気がします。 >Googleフォームの使い方を徹底解説|作り方から作成例まで詳しく紹介 >https://form.run/media/contents/enquete/googleform/

  • t_hirai
  • ベストアンサー率28% (222/788)
回答No.1

プログラム系でしたら、AIに聞いてみると分かるかもしれませんよ。

関連するQ&A