フォームを使って、入力されたアドレスにメールを送ろうと思っています。入力されたアドレスに@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";

このQ&Aに関連する最新のQ&A

A 回答 (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";
としてみる、とか。
    • good
    • 0
この回答へのお礼

noopeeさん

いろいろとアドバイスをありがとうございました。
結局この方法では、勉強不足でどこが影響して作動しないかが
わからず、他のフォームメールを元にして作成することができました。

みなさんにいただいたアドバイスをもとに、
この方法でも送信できるように勉強してみます。ご返事おくれたことおわび致します。

お礼日時:2002/02/21 14:05

>手動で 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")) {
じゃないのかな。

この回答への補足

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

補足日時:2002/02/06 18:22
    • good
    • 0

先ほど誤って回答して申し訳ありません。


シングルクォートを見落としていました。

ここから確認ですが、
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

この回答への補足

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

補足日時:2002/02/06 14:26
    • good
    • 0

$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

この回答への補足

コメントありがとうございます。

試してみたところ、サーバーエラーがでまして、
届いたメールにname\@docomo.ne.jp とついてしまいました。

補足日時:2002/02/06 18:24
    • good
    • 0

$docomo = '@docomo.ne.jp';



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

この回答への補足

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

補足日時:2002/02/06 11:27
    • good
    • 0

もしかしたら


$msg = "To: $form{'email'} $docomo\n";

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

この回答への補足

MtHillさんコメントありがとうございます。

その方法で試してみたのですが、
サーバーエラーは、でなくなりましたが、
メールが送信されないのです。。。

補足日時:2002/02/05 17:23
    • good
    • 0

こんにちは。



うまくいきませんとのことですが、どのような結果になっているのでしょうか?

$msg = "To: $form{'email'} $docomo\n";
このあと、$msgには何が入っていますか?

この回答への補足

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;
}
}
}

補足日時:2002/02/05 15:27
    • good
    • 0

このQ&Aに関連する人気のQ&A

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aと関連する良く見られている質問

Q$wfurikae = 1 if ( &ccom::getShukujitsu( &com::tD( $wwy,$wwm,$wwd )) ne '' );がよく

$wfurikae = 1 if ( &ccom::getShukujitsu( &com::tD( $wwy,$wwm,$wwd )) ne '' );

というスクリプトがあったのですが、

$wfurikae = 1 の後に;もいれずifがきています。

違和感があります。

どのような意味になるのでしょうか。

宜しくお願い致します。

Aベストアンサー

そのまんまだと思いますよ。
if 以下の条件が真の時 $wfurikae = 1となります。
Perlはいろいろな書き方ができますので、こういう書き方もありです。
英語の文法の並びにする書き方です。

Q$in{'~'}を$~に変換

CGIを改造中です。
変数の処理なのですが、サブルーチン内で利用するときに「$in{'~'}」と言う形でしか表示してくれません。これを「$~」の形にしたいです。
数が少なければ「$~ = $in{'~'}」を個数書けばいいのでしょうけど、結構数があるので、何か簡単な方法で変換できないかと考えています。
良い方法があれば教えてください。

Aベストアンサー

ハッシュのままで何か不都合があるのかなと
疑問に思いつつ・・・
#実際ハッシュは
#「(変数の)値に別の値を対応させる」
#ために存在するわけだから

けど,まあ,やろうと思えばkeys関数でできますよ.

%in=(
'X' => 1,
'Y' => 2,
'Z' => 3,
);

for $key (keys %in){
${$key}=$in{"$key"};
print "key; $key ${$key}\n";
}

print "$X $Y $Z";

strictとwarningsのプラグマを外さないといけないので
副作用の方が大きいでしょうが.

Q$ENV{'HTTP_COOKIE'}について

windowsサーバーのcgi(※)にて「$ENV{'HTTP_COOKIE'}」でcookieの値が正常に取得できてましたが、
linuxサーバーにそのソースをそのまま移行し、動作確認したところ「$ENV{'HTTP_COOKIE'}」でcookieの値が取得できなくなってしましました。
(※)・・・ショッピングカートの処理

ちなみにSSLを使用しているページです。
(1)画面A(http)から「カート入れる」ボタンをクリックし、画面B(https)に遷移
(2)画面Bに遷移した際にcookieに取得、保存

要するにhttpsでセットしたものをhttpsゲットしようとしています。

サーバーの環境は以下となります
■windowsサーバー
・OS : Windows 2003 R2 SP2
・Perl ver : 5.8.7

■linuxサーバー
・OS : Red Hat Enterprise Linux 4
・Perl ver : 5.8.8
・パーミッション : 757

ロジックは変更していないのでおそらくサーバーのどこかの設定を変更しなければならないのではないかと思われますが、どこに手を付けてよいのかがわかりませんので
ご教授していただきたいです。

宜しくお願い致します。

windowsサーバーのcgi(※)にて「$ENV{'HTTP_COOKIE'}」でcookieの値が正常に取得できてましたが、
linuxサーバーにそのソースをそのまま移行し、動作確認したところ「$ENV{'HTTP_COOKIE'}」でcookieの値が取得できなくなってしましました。
(※)・・・ショッピングカートの処理

ちなみにSSLを使用しているページです。
(1)画面A(http)から「カート入れる」ボタンをクリックし、画面B(https)に遷移
(2)画面Bに遷移した際にcookieに取得、保存

要するにhttpsでセットしたものをhttps...続きを読む

Aベストアンサー

サーバー、Webサイトは並行稼動しているのでしょうか。

cookie をセットするときに、ドメインを指定しているが、
移行先のサーバーにアクセスする際のURLのドメインと
異なる、なんてことはないでしょうか。。。

QPrel正規表現で'$1$'.$saltのあたりが理解できない。

小生Perlを勉強中です。
Perl Codeに以下のようなパスワード暗号処理のサブルーチンが
ありましたが、読めません。教えて下さい。

sub encrypt{
local($inpw)=$_[0];
local(@SALT,$salt,$encrypt);

@SALT=('a'..'z','A'..'Z','0'..'9','.','\');
srand;
$salt=$SALT[int(rand(@SALT)).$SALT[int(rand(@SALT))];
$encrypt=crypt($inpw,$salt)||crypt($inpw,'$1$'.$salt);
return $encrypt;
}

とあります。
特に、下から3行目の($inpw,'$1$'.$salt)が
理解できません。
解説していただければ幸いです。

Aベストアンサー

過去に同様の質問がありました。ctpsysさんの疑問にすべて答えられるかどうかわかりませんが、すくなくとも
>下から3行目の($inpw,'$1$'.$salt)が理解できません
というご質問に対しては参考になるかと思います。

参考URL:http://oshiete1.goo.ne.jp/kotaeru.php3?q=74593,http://oshiete1.goo.ne.jp/kotaeru.php3?q=74593,

Q「$" = ',';」という構文の意味は?

Perl スクリプト中に「$" = ',';」という構文が出てきたのですが、これはどういう意味ですか?

Aベストアンサー

"(ダブルクオート)内ではリスト値(@foo)も展開されますが、そのリスト値の区切り文字を定義する特殊変数で、デフォルトはスペースだそうです。

参考URL:http://www.tohoho-web.com/wwwperl1.htm#Tokushu


おすすめ情報