プロが教える店舗&オフィスのセキュリティ対策術

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

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が見つからない時は、教えて!gooで質問しましょう!