sendmailで複数の宛先にメールするにはどのような記述にすればいいですか?

print(MAIL "To: info\@goo.ne.jp, admin\@goo.ne.jp\r\n");

とかって書けばいいんでしょうか?うまくうごかないのですが・・・。

よろしくお願いいたします。

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

A 回答 (3件)

カンマ区切りは正しそうですが、


カンマの後に、空白を入れないで試したらどうですか

「参考」URL:
http://www3.ocn.ne.jp/~koshino/sendmail.html
    • good
    • 0
この回答へのお礼

inoue64さん、slackwareさん、Head_Syndicateさん
みなさん、大変早いアドバイスありがとうございました。

カンマで区切ったあとのスペースをはずしてみたところ
たしかにメールが送られてきました。

たったひとつのスペースなんですが、動かないものですね。
本当にありがとうございました!!

お礼日時:2001/05/19 14:01

もしそのsendmailが実際にはqmailであった場合(プロバイダによっては


そうしているところも多いでしょう)、
カンマを取って半角スペースひとつに置き換えてみてください。

qmailで偽装したsendmailは大体オリジナルと互換なのですが
いくつか注意するところがあります。親切なプロバイダなら
そのあたりをどこかで解説してあるかもしれませんから、探して
みてください。

あと、
print(MAIL "To: info\@goo.ne.jp\r\n");
print(MAIL "To: admin\@goo.ne.jp\r\n");
とする方法もあると思います(手元に実験環境がないので試して
いませんが)。これがうまくいくなら、カンマ、スペース
に関わらず使えるのでより汎用性が高いスクリプトとなると
思います。

それでもダメだったら…Sendmail.pmやらSocketを直接叩くに至る
まで、メール送信のためのモジュールはいくつかありますので
そちらを使うことも検討してもいいかもしれません。sendmailを
使うことだけが唯一の手段ではありませんので。
    • good
    • 0

プログラムの前後が記述されていないので、外しているかもしれませんが.


アドレスを一つだけ書いた場合は、正常に送信できるのですか?

私は、

-->
#!/usr/bin/perl

open(MAIL, "|/usr/sbin/sendmail -t");
print MAIL "From: hoge@dokokano.domain\r\n";
print MAIL "Subject: Perl de mail\r\n";
print MAIL "To: xx@sokorano.domain, yy@kokono.domain\r\n";
print MAIL "\r\n";
print MAIL "Perl de mail\r\n";
close(MAIL);

exit;
<--

というような記述をして複数の宛て先にメールを送信できました.
    • good
    • 0

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

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

このQ&Aを見た人はこんなQ&Aも見ています

このQ&Aを見た人が検索しているワード

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

Q正規表現で@を使う場合は\@とするべきか@とするべきか悩んでいます。

正規表現で@を使う場合は\@とするべきか@とするべきか悩んでいます。
両方とも構文エラーが起きないのでその時点で?ですが
.は\.としないと正規表現ではドット文字を認識しないのはわかりますが、正規表現の@はどうすればよいのでしょうか?
Perl自体@も配列なので\@つけた方が・・・
よろしくお願いいたします。

$x = "test@example.com";
if ( $x =~ /[^a-zA-Z0-9\.\-\_@]/)
if ( $x =~ /[^a-zA-Z0-9\.\-\_\@]/)

Aベストアンサー

> $x = "test@example.com";
>if ( $x =~ /[^a-zA-Z0-9\.\-\_@]/)
>if ( $x =~ /[^a-zA-Z0-9\.\-\_\@]/)

文字列中の @ をエスケープを忘れてはいけません。
これは正規表現のマッチとは関係ありません。
この例でもuse strict すれば警告が出るはずです。


use strict;
use warnings;

#my $x = "foo@example.com";
my $x = "foo\@example.com";

#my @z = qw(f o o);
print "match\n" if $x =~ /[@z]/;

実行時のエラーメッセージ:
Possible unintended interpolation of @z in string at interpol.pl line 8.
Global symbol "@z" requires explicit package name at interpol.pl line 8.
Execution of interpol.pl aborted due to compilation errors.


上のスクリプトの my @z の行を生かすと
マッチに成功するようになります ;-)
@のエスケープは正規表現パターン中でも
必要ですが、ブラケットの中にある
'.' や '_' のエスケープは不要です。
'-' は扱いが微妙なんですが、この例では必要ですね。

> $x = "test@example.com";
>if ( $x =~ /[^a-zA-Z0-9\.\-\_@]/)
>if ( $x =~ /[^a-zA-Z0-9\.\-\_\@]/)

文字列中の @ をエスケープを忘れてはいけません。
これは正規表現のマッチとは関係ありません。
この例でもuse strict すれば警告が出るはずです。


use strict;
use warnings;

#my $x = "foo@example.com";
my $x = "foo\@example.com";

#my @z = qw(f o o);
print "match\n" if $x =~ /[@z]/;

実行時のエラーメッセージ:
Possible unintended interpolation of @z in string at i...続きを読む

Qperlスクリプト s/^\s+//;  s/\s+$//;  return wantarray ? @out : $out[0]; について

自作の掲示板を作ろうと思い、perlの勉強をしている者です。人様の作ったスクリプトを解析しています。以下のスクリプトはライブラリに記述されていたものです。


sub tttt {
my @out = @_;
for (@out) {
s/^\s+//;
s/\s+$//;
}
return wantarray ? @out : $out[0];


このスクリプトなんですが、 s/^\s+//; の部分の「+」と s/\s+$//; の部分の「+$」、 また「return wantarray~」 の三つの部分のスクリプトが、どういった働きをしているの分かりません。専門書やウェブ上のリファレンスも色々調べたのですが・・。

分かる方いらっしゃいましたらご教授下さると幸いです。よろしくお願いします。

Aベストアンサー

まず前2つの「+」は,正規表現における,「直前の表現を一回以上繰り返し」をあらわします.
「\s」は空白文字一文字を表す正規表現ですので,「\s+」は,「一文字以上の空白文字」になります.
次に,最初の「^」と2番目の「$」は,その正規表現がどこに現れるかを示す記号です.それぞれ,先頭と最後尾にあることを示します.
したがって,「^\s+」は,「最初に空白が一文字以上ある文字列」に,
「\s+$」は「行末に空白が一文字以上ある文字列」にヒットします.
置換構文sはご存知なんですかね.すなわち,この2文で,行の最初と最後の空白を消しているんです.

次に, wantarray ですが,
http://www2u.biglobe.ne.jp/~MAS/perl/ref/wantarray.html
によると,このサブルーチンttttを呼び出すときに,何を返り値にしているかで真偽が決まる関数です.
呼び出す時に配列を希望していたら @out 全体を,変数を希望していたら $out[0]だけを返します.

Q@b = grep(/マッチパターン/, @a);でなく@a = grep(/マッチパターン/, @a);でOKについて

@b = grep(/マッチパターン/,@a);だと配列@aの中でマッチするものを探して@bに入れる・・・というのは理解できるんですが、
@a = grep(/マッチパターン/,@a);とし、
foreach $_ (@a) {
print $_;
}
で参照した場合、@aの中のマッチパターンにマッチするのだけ表示されますけれども、ここでマッチしないのは削除されるのでしょうか・・。

@aから@aにいれる・・・となる事について、どのように@aにマッチしたものを入れ、マッチしないものは削除されるのかの仕組みについて、ご説明できる方はいらっしゃいますでしょうか(例えば内部的にpopやshiftが機能していて・・・みたいな事なのかな・・とか思うんですけれども)

お手数ですが、ご存知の先生方ご教授願えましたら幸いです。

Aベストアンサー

#1でのTacosanさんの回答の1です。
つまり、
@a = grep(/マッチパターン/,@a);
これは
@aの内容を列挙→ grepに掛ける→条件に合うものだけのリストを作成→作成したリストを代入。
となります。
grepに掛かる前の@aの内容は、代入の際に「丸ごと」破棄されます。

perly.y
/* Binary operators between terms */
termbinop:term ASSIGNOP term /* $x = $y */
{ $$ = newASSIGNOP(OPf_STACKED, $1, IVAL($2), $3);
TOKEN_GETMAD($2,$$,'o');
}

op.c

OP *
Perl_newASSIGNOP(pTHX_ I32 flags, OP *left, I32 optype, OP *right)
{
dVAR;
OP *o;

(略

if (is_list_assignment(left)) {
static const char no_list_state[] = "Initialization of state variables"


という具合なので、代入の左右両辺が同じ変数かどうかのチェックは多分やってません。

#1でのTacosanさんの回答の1です。
つまり、
@a = grep(/マッチパターン/,@a);
これは
@aの内容を列挙→ grepに掛ける→条件に合うものだけのリストを作成→作成したリストを代入。
となります。
grepに掛かる前の@aの内容は、代入の際に「丸ごと」破棄されます。

perly.y
/* Binary operators between terms */
termbinop:term ASSIGNOP term /* $x = $y */
{ $$ = newASSIGNOP(OPf_STACKED, $1, IVAL($2), $3);
TOKEN_GETMAD($2,$$,'o');
}

op.c

OP *
Perl_newASSIGNOP...続きを読む

Qエラーログ「\x8ew\x92\xe8・・・」はどういう意味?

以下のような意味不明のサーバー「エラーログ」が出るのですが、何を意味しているのでしょうか?

スクリプト(フォームの入力値を取得するプログラム)の動作上はなんら問題はないのですが、必ず出るエラーなので、その意味が知りたいのです。

-------------
[Wed --] [error] [client --] \x8ew\x92\xe8\x82\xb3\x82\xea\x82\xbd\x83p\x83X\x82\xaa\x8c\xa9\x82\xc2\x82\xa9\x82\xe8\x82\xdc\x82\xb9\x82\xf1\x81B\r, referer: http://127.0.0.1/fmail.cgi
[Wed --] [error] [client --] \x8ew\x92\xe8\x82\xb3\x82\xea\x82\xbd\x83p\x83X\x82\xaa\x8c\xa9\x82\xc2\x82\xa9\x82\xe8\x82\xdc\x82\xb9\x82\xf1\x81B\r, referer: http://127.0.0.1/fmail.cgi
--------------

ActivePerl-5.6.1.638-MSWin32
Apache/2.0.55(Win32)

以下のような意味不明のサーバー「エラーログ」が出るのですが、何を意味しているのでしょうか?

スクリプト(フォームの入力値を取得するプログラム)の動作上はなんら問題はないのですが、必ず出るエラーなので、その意味が知りたいのです。

-------------
[Wed --] [error] [client --] \x8ew\x92\xe8\x82\xb3\x82\xea\x82\xbd\x83p\x83X\x82\xaa\x8c\xa9\x82\xc2\x82\xa9\x82\xe8\x82\xdc\x82\xb9\x82\xf1\x81B\r, referer: http://127.0.0.1/fmail.cgi
[Wed --] [error] [client --] \x8ew\x92\xe8\x...続きを読む

Aベストアンサー

Shift-JISの生バイト配列が文字になったモノですね。
デコードしてみると、

「指定されたパスが見つかりません」

となりました。
使用しているスクリプト中の、ファイルバスの部分を確認してみてください。
存在しないディレクトリやファイルを指定している部分があるのではないでしょうか。

QsendmailでFROMに勝手に@~が追加される

またまた質問です。

sendmailでメールを送っているのですが、
送信者の決定の所で、

$t_to="dareka@mail.co.jp";
$from = "admin@info.com";
~略
print MAIL "To: $t_to\n";
print MAIL "From: $from\n";
~略

$from = "admin@info.com";
とすると届いたメールの送信者は
admin@info.com@www1000.wh.ocn.ne.jp
になってしまいます。

つまり、送信者決定のところで、
「@www1000.wh.ocn.ne.jp」というのが
勝手に追加されてしまうんです。
これでは存在しないアドレスになり返信ができません。


同じような症状の出た方、いらっしゃいますでしょうか?
ああ、もう期限が無いッス・・・。

Aベストアンサー

sendmail.cfで、送信者に自ドメインを付加するルールセットが定義されているのかも。
sendmail.cfを、読み取り/修正する権限があるなら、そちらを確認してみては。
権限を持ってないなら、OCNに確認するしかないでしょう。

案外、Reply-Toを、メール・ヘッダーに追記するだけで済むかもしれませんが。


このQ&Aを見た人がよく見るQ&A

おすすめ情報