• ベストアンサー

入力されたアドレスに@docomo.ne.jpを追加

フォームを使って、入力されたアドレスにメールを送ろうと思っています。入力されたアドレスに@docomo.ne.jpを追加しようと思うのですが、うまくいきません。 どなたかご教授お願い致します。 ソースはこんな感じです。 $location = 'http://www.0000.co.jp/'; $docomo = '@docomo.ne.jp'; if (open(MAIL, "|$sendmail -f $form{'email'} $docomo -t")) { $msg = "To: $form{'email'} $docomo\n"; $msg .= "From: $webmaster\n";

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

  • ベストアンサー
  • noopee
  • ベストアンサー率38% (114/297)
回答No.7

締め切られていないようなので、まだできていないとみなして再度。 現状は@docomo.ne.jpが付けられない、と言うことですが、@docomo.ne.jpをつける必要のない $webmaster = '0000@0000.co.jp'; へはメールは飛ぶのでしょうか?? ただ@docomo.ne.jpが付けられない、というレベルであれば。 $mail = $form{'email'}; $mail .= '@docomo.ne.jp'; $msg = "To:$mail\n"; もしくは、 $msg = "To: $form{'email'}.$docomo\n"; としてみる、とか。

izaq
質問者

お礼

noopeeさん いろいろとアドバイスをありがとうございました。 結局この方法では、勉強不足でどこが影響して作動しないかが わからず、他のフォームメールを元にして作成することができました。 みなさんにいただいたアドバイスをもとに、 この方法でも送信できるように勉強してみます。ご返事おくれたことおわび致します。

その他の回答 (6)

  • alicia-y
  • ベストアンサー率40% (85/208)
回答No.6

>手動で sendmail を起動する方法がちょっとよくわからないのですが、 1. まず送信する内容のファイルを作る。 % vi sendfile sendfile の内容は -- ここから ---- To: 090xxxxxxxx@docomo.ne.jp From: 0000@0000.co.jp メッセージ メッセージ -- ここまで ---- という様な内容のもの 2. sendmail で送信する。 # /usr/sbin/sendmail -f 0000@0000.co.jp -t < sendfile これで送信出来るかテストする。 ---------------------------------------------------------------- あ、今スクリプトの例を見ると if(open(MAIL, "|$sendmail -f $form{'email'} $docomo -t")) { は if(open(MAIL, "|$sendmail -f $webmaster -t")) { じゃないのかな。

izaq
質問者

補足

コメントありがとうございます。 さっそく試してみます。

  • alicia-y
  • ベストアンサー率40% (85/208)
回答No.5

先ほど誤って回答して申し訳ありません。 シングルクォートを見落としていました。 ここから確認ですが、 CGIからでなくて手動で sendmail を起動してメールを送信した場合は ちゃんと送られるのでしょうか。 sendmail -f xxxx@docomo.ne.jp -t < sendfile それと sendmail にいきなり送るのではなくていったんファイルに出力して 正しく送る内容が出来ているか確認したほうがいいでしょう。 if(open(MAIL, "|sendmail .... を if(open(MAIL, ">/tmp/filename")) #sendmail が From をチェックしていて relay を拒否しているんじゃ無いだろうか? #ログに何かメッセージが出てませんか? #/var/log/maillog or /var/log/messages or /var/log/syslog

izaq
質問者

補足

コメントありがとうございます。 手動で sendmail を起動する方法がちょっとよくわからないのですが、 申し訳ないですが、具体的な方法を教えていただけないでしょうか?

  • MtHill
  • ベストアンサー率68% (17/25)
回答No.4

$docomo = '@docomo.ne.jp'; を $docomo = '\@docomo.ne.jp'; にすると、サーバーエラーになる可能性があります。 とほほのperl入門(概要編) http://tohoho.wakusei.ne.jp/wwwperl1.htm に、 「ダブルクォーテーションの中では変数やバックスラッシュ( \ )が 評価されますが、シングルクォーテーションの中では単なる文字として 認識されます。」 とある通り、上記の例だとメールヘッダーの「To:」フィールドの内容が name\@docomo.ne.jp になるかもしれないからです。 もし、 $docomo = '@your-isp.ne.jp'; (あなたのプロバイダードメイン) などでテストしても送信されない場合、 原因は DoCoMo にあると思います。

参考URL:
http://tohoho.wakusei.ne.jp/wwwperl1.htm
izaq
質問者

補足

コメントありがとうございます。 試してみたところ、サーバーエラーがでまして、 届いたメールにname\@docomo.ne.jp とついてしまいました。

  • alicia-y
  • ベストアンサー率40% (85/208)
回答No.3

$docomo = '@docomo.ne.jp'; を $docomo = '\@docomo.ne.jp'; にしたら上手くいきませんか?

izaq
質問者

補足

alicia-yさんコメントありがとうございます。 早速試してみたところ、サーバエラーがでてしまい うまくいきませんでした。。。 なにが原因なんでしょうね?

  • MtHill
  • ベストアンサー率68% (17/25)
回答No.2

もしかしたら $msg = "To: $form{'email'} $docomo\n"; を $msg = "To: $form{'email'}$docomo\n"; にする (半角スペースを入れない) とうまくいくかもしれません。

izaq
質問者

補足

MtHillさんコメントありがとうございます。 その方法で試してみたのですが、 サーバーエラーは、でなくなりましたが、 メールが送信されないのです。。。

  • noopee
  • ベストアンサー率38% (114/297)
回答No.1

こんにちは。 うまくいきませんとのことですが、どのような結果になっているのでしょうか? $msg = "To: $form{'email'} $docomo\n"; このあと、$msgには何が入っていますか?

izaq
質問者

補足

noopeeさんこんにちは、 先ほどのものでは、説明不足でした。 申し訳ございません。 最近よくある、i-modeへのアドレスの転送をしようと思っております。 まず、フォームにメールアドレスの@以前の部分を入力していただき、 plに送り@docomo.ne.jpの部分を追加して、 フォームに記入されたメールアドレスへ、 i-modeサイトのURLをメールで送り、 locationで指定をしたページへ飛ばすことがしたいのです。 現状はフォームに入力したアドレスに、@docomo.ne.jpを追加することができません。。。 @docomo.ne.jpをフォームの中にhiddenとして、読ませようともしたのですが、 サーバーエラーがでてしまいます。 以下が全文です。 どこが問題なのでしょうか? 初心者なので、今一つわかりません。 よろしくお願い致します。 #!/usr/bin/perl require 'jcode.pl'; $kanjicode = 'shift-jis'; $sendmail = '/usr/sbin/sendmail'; &init_form($kanjicode); $webmaster = '0000@0000.co.jp'; $location = 'http://www.0000.co.jp/'; $docomo = '@docomo.ne.jp'; if (open(MAIL, "|$sendmail -f $form{'email'} $docomo -t")) { $msg = "To: $form{'email'} $docomo\n"; $msg .= "From: $webmaster\n"; $msg .= 'Subject: '."\n"; $msg .= " http://www.0000.co.jp/i/ ※フォームの入力をされていないにもかかわらず、 このメールを受信された場合は、 どなたかが誤ってあなたのアドレスを 入力してしまった場合がありますので、 このメールを削除してください。\n\n"; &jcode'convert(*msg, 'jis'); print MAIL $msg; close(MAIL); print "Location: $location\n\n"; } sub init_form { local($query, @assocarray, $assoc, $property, $value, $charcode, $method); $charcode = $_[0]; $method = $ENV{'REQUEST_METHOD'}; $method =~ tr/A-Z/a-z/; if ($method eq 'post') { read(STDIN, $query, $ENV{'CONTENT_LENGTH'}); } else { $query = $ENV{'QUERY_STRING'}; } @assocarray = split(/&/, $query); foreach $assoc (@assocarray) { ($property, $value) = split(/=/, $assoc); $value =~ tr/+/ /; $value =~ s/%([A-Fa-f0-9][A-Fa-f0-9])/pack("C", hex($1))/eg; &jcode'convert(*value, $charcode); if ($form{$property}) { $form{$property} .= ':' . $value; } else { $form{$property} = $value; } } }

関連するQ&A

専門家に質問してみよう