(1)お問い合わせフォームを入力(2)入力データを確認する(3)最後に指定先のメールに送り終了
という具合ですが(3)のところで指定先にメールが届きません。メール自体も送られてこないのですがどのような方法があるのでしょうか?どうか教えていただけないでしょうか?お願いします。

(3)のソースコートです。-------------
&header;
open (KEIJI, "<keijiban.dat") || die "File 'keijiban.dat' Open Error.";

# ファイルの内容を1行単位ですべて配列allに読み込む
@all = <KEIJI>;
split(/:/, $_);
if( $_ = $all[0] ){
($time, $name, $mail, $title, $message, $to) = split(/:/);

#送信前処理
&jcode'convert(*subject,'jis');
&jcode'convert(*body,'jis');

# send mail
open(MAIL, "| /usr/lib/sendmail -t");
print MAIL "TO: $to\n";
print MAIL "From: $from\n";
print MAIL "Subject: $subject\n";
print MAIL "Content-Type: text/plain;\n\n";
print MAIL "\n";
print MAIL "---------------------------------------------\n";
print MAIL " 名前:$name\n";
print MAIL " 内容:$body\n";
print MAIL " お名前:$firstname $secondname\n";
print MAIL " かな:$kanafirstname $kanasecondname\n";
print MAIL " 所在都道府県 :$area1 $area2\n";
print MAIL " 電話番号:$telno\n";
print MAIL " 性別:$sex\n";
print MAIL " メールアドレス:mailto:$mailad\n";
print MAIL "お問合わ、ご相談内容:";
print MAIL " $con1\n";
print MAIL "---------------------------------------------\n";
close(MAIL);
&one_message;
}
close(KEIJI);
# フッターを表示するサブルーチン
&footer;

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

A 回答 (4件)

単純にパイプでメール送信するのであれば、



#!/usr/bin/perl

$from = "hoge\@hogehoge.hoge";
$to = "hoge\@hogehoge.hoge";

open MAIL, "|nkf -j -m0| /usr/sbin/sendmail -f $from -t $to";

print MAIL "From: $from\n";
print MAIL "Subject: This is a test mail.\n";
print MAIL "To: $to\n";
print MAIL "\n";
print MAIL "ほげほげ\n";

close MAIL;

のようにすれば送れます。
どこが抜けていたかはご覧になればご覧になればわかると思います。
まあ、Fookeyさんの仰るとおりsendmailが正常に動作していればの話ですが。
    • good
    • 0

> &jcode'convert(*subject,'jis');


> &jcode'convert(*body,'jis');

$subject と $body はどこから沸いたのでしょう?
    • good
    • 0

まず、そのマシン上のsendmailの設定は済んでいて、


いつもそのsendmailを介してメールが送れていますか?
それができていないなら、当然、perlからメールを
送ることもできません。

未確認なら、mailコマンドなどで、メールがきちんと
送れることを確認して下さい。

prompt> mail -s TEST_MAIL yourname@your.mail.host.ne.jp

とやると、メールの本文入力モードになるので、
本文を入力して、Ctrl-Dを押します。それで
yourname@...にメールが届けば、sendmailは
ちゃんと動いてます。

以上の確認をしたか、あるいはいつもそのマシンのsendmailを
介してメールを送っていることが明らかなら、sendmailのログや
標準エラー出力をチェックするんですね。sendmailに-vオプションを
指定すれば、チェックモードになってメッセージがいっぱいでます。
ログは/var/log/maillogとか/var/log/syslog、/var/log/messagesに
入ってるはずです。標準エラーは、

open(MAIL, "| /usr/lib/sendmail -t -v >>& /tmp/sendmail-stderr.log") or die $!;

などとして、/tmp/sendmail-stderr.log(名前はなんでもいいです
けど)をチェックして下さい。原因を特定しないことには
どうにもならないですから。

あと、私には直接sendmailを起動する意図がよく分らないです。
sendコマンドとかimputコマンドを使わないんですか?
imputはメールの整形やヘッダのMIMEエンコード、JISへの変換など
勝手にやってくれますよ。さらには、CGIが動いてるローカル
マシンではない、リモートサーバ上のsendmailを利用することも
可能です。その場合、同一組織内のサーバでない限り、はじかれますが。
ですから、ローカルマシンのsendmailがちゃんと設定されていない場合、
いつも利用している同一組織内の別のサーバ上のsendmailを
使った方が簡単です。

なお、imputを使うには、imパッケージがインストールされてないとダメです。

意地でもsendmailを使いたいなら、selenityさんが仰るように、
まだやることがあります。

1.ヘッダ部分のBase64エンコーディング
  jcodeではなく、Jcodeパッケージを使って、
  print MAIL "Subject: ", Jcode->new($subject)->mime_encode, "\n";
  To:, From: なども同様。

2.print MAIL " 名前:$name\n"; の「名前」など、
  変数以外の部分は確かにJISですか?
  そんなに一生懸命JISへの変換をしなくても、

  open(MAIL, "| nkf -j | /usr/lib/sendmail -t") or die $!;

  とやって、nkfを噛ましてやれば、全部JISに変換してくれます。
  nkfがインストールされてないようなら、インストールする
  価値はあると思いますよ。

3.まあ、クリティカルな問題ではないですが、お行儀よくするなら、
  Content-TypeとかMime-Versionとかのヘッダエントリも入れましょう。

最後に、細かいことですが、
  open(FH, "....") || die $!;
よりも、
  open(FH, "....") or die $!;
ですよね。open()のC記法をずっと遵守するなら
問題ないですが、そのうちにperlの手抜き記法に慣れて
  open FH, "..." || die $!;
とかやり出すと、優先順位の関係から、エラー検出が
できなくなります。
    • good
    • 0

perlはほとんど使ったことがないのでよくわかりませんが、このコードだとメールを送る送らない以前の問題があるようにみえます。


Mime関連の設定は
---
"Content-Type: text/plain; charset=\"iso-2022-jp\""
"Content-Transfer-Encoding: 7bit"
"Mime-Version: 1.0"
---
と書くのが正式(?)ですし、
---
&jcode'convert(*subject,'jis');
print MAIL "Subject: $subject\n";
---
となっていますが、
print MAIL "Subject: $subject\n";
の$subjectの部分はMime-Encodeする必要があります。
To,Fromの部分に関しても日本語を使用しているのであれば、Mime-Encodeは必須です。
さらに
---
&jcode'convert(*subject,'jis');
&jcode'convert(*body,'jis');
---
とJISに変換していても、肝心なメールの本文の部分はEUCまたは、Shift-JISのままなのではありませんか?
だとすると、漢字コードが入り交じったメールが送信されませんか?
8bitコードが含まれているためsendmailが拒否している可能性はありませんか?
このままでは受け取ったほうが迷惑します。

それとも最近のsendmailって勝手に漢字コードの変換を行ってくれるのでしょうか?

何事も基本が大切です。
    • good
    • 0

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

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

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

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

Qサービス業について

私の親戚の子が今度就職します。希望はサービス業
だそうです。しかし私は疑問を感じます。一生続けられる
仕事なのか?確かにサービス業は身近です。そこで
接客する人は気のせいか若い人や、アルバイトなどの
人が多いです。もちろん末端で働く人を高給取りの
社員にする事はないと思います。しかしサービス業の
会社の平均年齢とか見るとどこも若いですねえ。
やはり若くして入って数年で辞めるのがサービス業
なんでしょうか?

Aベストアンサー

サービス業、といってもいろいろな職種があり、これもなんともいえませんが。
たぶんスーパーを考えているのではという事で
 確かにきついかもしれませんが、慣れてしまえば
別にきつくありません。(これもお店によりますが)
 やはり、仕事のコツを覚えてするのと、覚えないで
やる方と人の差が出る仕事ではないでしょうか?
やる仕事はたくさんあります。あきらめないでがんばってほしいですね

もし、就職なさるなら資格を取る(販売士)そして冬休みにコンビニでもいいですが、アルバイトをなさった方がいいと思います

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警察官はサービス業?

30年くらい前、学校で
第1次産業・第2次産業・第3次産業、を習いました。
1~農林水産業
2~工業
3~サービス業
こんな感じだったと思います。
で、1・2以外は、公務員も警察官も医師も、
第3次産業=サービス業、と習った記憶があります。

2~3年前に、警察官と話した時に
私が、警察官はサービス業でしょう、と言うと、そのかたは違うといました。

どちらが正しいのでしょうか。
習う内容が変わったのでしょうか(1,2,3、に分けない、とか)
どうなんでしょう。

一応調べましたが、サービス業とも言えなくはない、とか、はっきり書かれたものが見つけられず、
質問いたします。

Aベストアンサー

総務省の発表では警察官はサービス業には含まれていませんでした。
http://www.stat.go.jp/data/service/2004/bunrui.htm

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統計上のサービス業とは?

内閣府の統計によると、名目GDPの構成要素として、11の産業が分類されています。

農林水産業 鉱業 製造業 建設業 電気・ガス・水道業 卸売・小売業 金融・保険業
不動産業 運輸業 情報通信業 サービス業
http://www.esri.cao.go.jp/jp/sna/__icsFiles/afieldfile/2011/12/22/seisan20111226.pdf

一方、総務省の統計によると、「産業別規模別事業所・企業数」として、16の産業が分類されています。

鉱業 建設業 製造業 電気・ガス・熱供給・水道業 情報通信業 運輸業 卸売・小売業
金融・保険業 不動産業 飲食店、宿泊業 医療、福祉 教育、学習支援業
複合サービス事業 サービス業(他に分類されないもの)
http://www.chusho.meti.go.jp/pamflet/hakusyo/h21/h21/html/k9100000.html

そこで質問なのですが、
「産業別規模別事業所・企業数」として分類されている16の産業のうち、
名目GDPの構成要素として分類されているサービス業に当てはまるのはどれですか?

つまりは、サービス業の企業数を知りたいのです。

ご教授よろしくお願いいたします。

内閣府の統計によると、名目GDPの構成要素として、11の産業が分類されています。

農林水産業 鉱業 製造業 建設業 電気・ガス・水道業 卸売・小売業 金融・保険業
不動産業 運輸業 情報通信業 サービス業
http://www.esri.cao.go.jp/jp/sna/__icsFiles/afieldfile/2011/12/22/seisan20111226.pdf

一方、総務省の統計によると、「産業別規模別事業所・企業数」として、16の産業が分類されています。

鉱業 建設業 製造業 電気・ガス・熱供給・水道業 情報通信業 運輸業 卸売・小売業
金融・...続きを読む

Aベストアンサー

産業別GDPを参照したい
http://www.esri.cao.go.jp/jp/sna/otoiawase/qa8.html

より経済活動別分類を詳しくみてみると、、

サービス業は主に3つに分けられて

●公共サービス
-教育、研究、医療・保健衛生、
その他の公共サービス業

●対事業所サービス
-広告業、業務用物品賃貸業、
自動車・機械修理、
その他の対事業所サービス業

●対個人サービス
-娯楽業、飲食店、
旅館、洗濯・理容・美容・浴場業、
その他の対個人サービス業


とあるから総務省の統計では「飲食店、宿泊業 医療、福祉 教育、学習支援業」と計上されている後ろの5つの項目が内閣府ではサービス業として分類されていると思われます。。

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

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

Aベストアンサー

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

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

Q医療はサービス業か否か??

こんにちは。最近は‘患者さま‘と呼ぶ医療機関も表れはじめ医療もサービス業色が強くなってきました。
ここでも患者の権利意識が高くなったのか‘我われは医者を選んでやっている。王様のように扱わないのはけしからん!!‘といった感じの質問も多々見かけます。
はたして医療機関もサービス業なのでしょうか?
サービス業というのは支払った対価に見合うサービスしか受けれないのが資本主義においては原則です。
例えば飛行機でもエコノミークラスとファーストクラスにおいては受けられるサービスは異なります。エコノミーの料金しか支払えない人はファーストクラスのサービスは受けられません。ホテルも一般客とスイートルームの宿泊客では待遇が違います。
しかしながら日本では医療においては経済格差に関係なく同じ扱いをされることになっています。(表向きには)
宿泊料金すら支払えない経済力の人間がスイートルーム並みのサービス(医療行為)を求めることが正当なことになっています。
そう考えると医療はサービス業としては成り立たないのではないでしょうか?(全額自費の美容外科などは100%サービス業ですが)

こんにちは。最近は‘患者さま‘と呼ぶ医療機関も表れはじめ医療もサービス業色が強くなってきました。
ここでも患者の権利意識が高くなったのか‘我われは医者を選んでやっている。王様のように扱わないのはけしからん!!‘といった感じの質問も多々見かけます。
はたして医療機関もサービス業なのでしょうか?
サービス業というのは支払った対価に見合うサービスしか受けれないのが資本主義においては原則です。
例えば飛行機でもエコノミークラスとファーストクラスにおいては受けられるサービスは異なります...続きを読む

Aベストアンサー

確かに医療機関もサービス業なのです。
但し、資本主義の原則には則しません。
何故なら、日本の医療保険制度は「社会主義制度」だからです。診療報酬制度に縛られて、診療行為別の報酬が国によって決められて、医療側には裁量権が有りません。
詰まり、1点10円の単価が決められて、値引きも、上乗せも一切認められていません。更に、医師や看護師の人数や、病院の廊下の幅や階段の段の高さ、病室の面積等々細部にわたって規制されています。
もし、これを侵して値引きなどをやれば、保険医取り消しになり、保険診療は出来なくなります。
更に、日本の保健医療制度は、医療機関は保険者(社会保険・国民保険)との契約で、被保険者(患者)に現物給付(医療行為)を行って、報酬は保険者から貰います。患者からは貰いません。
現実に患者が窓口負担で3割払いますが、これは患者が保険者に払うもので、医療機関はその代行者として、仮に受け取っているだけのものです。
被保険者(患者)は保険者に保険料を払う事によって、医療を受ける権利の契約をします。
詰まり、医療保険制度上は医療機関と患者の間には経済的契約関係は有りません。医療機関と患者の間に有る契約は診療契約だけで、これには経済的な事は含まれません。「ファーストクラス並スイートルーム並みのサービス」に関しては、個室料とかでの差別は有ります。
これを資本主義にしようというのが、「医療への株式会社の参入」論議です。株式会社は資本主義そのものですから。
私としては、患者に「様」付けをするのは、泥棒に様を付けるのに等しい行為だと思います。

確かに医療機関もサービス業なのです。
但し、資本主義の原則には則しません。
何故なら、日本の医療保険制度は「社会主義制度」だからです。診療報酬制度に縛られて、診療行為別の報酬が国によって決められて、医療側には裁量権が有りません。
詰まり、1点10円の単価が決められて、値引きも、上乗せも一切認められていません。更に、医師や看護師の人数や、病院の廊下の幅や階段の段の高さ、病室の面積等々細部にわたって規制されています。
もし、これを侵して値引きなどをやれば、保険医取り消しになり...続きを読む

Qopen (FILEHANDLE,"< $filename") or die "エラーメッセージ";について

下記プログラムでperl_read_writes.txtを出力すると、中身が表示されるのですが、a_perl_read_writes.txt等に名前を変更すると、当然エラーが起きます。
が、die "$filenameを開けません。";の部分の
$filenameを開けません。という文章が出力されないのですが、どなたか原因分かりませんか?

==================================================
#!/usr/bin/perl
print "Content-type: text/html;charset=Shift-JIS", "\n\n";

# HTMLの出力
print "<html>\n";
print "<body>\n";
print "ファイルの読み書き<br>\n";

$filename='/usr/local/apache/htdocs/aaa/bbb/perl_read_writes.txt';
# ファイルオープン
open (FILEHANDLE,"< $filename") or die "$filenameを開けません。";
...以下省略
==================================================

よろしくお願いします。

下記プログラムでperl_read_writes.txtを出力すると、中身が表示されるのですが、a_perl_read_writes.txt等に名前を変更すると、当然エラーが起きます。
が、die "$filenameを開けません。";の部分の
$filenameを開けません。という文章が出力されないのですが、どなたか原因分かりませんか?

==================================================
#!/usr/bin/perl
print "Content-type: text/html;charset=Shift-JIS", "\n\n";

# HTMLの出力
print "<html>\n";
print "<body>\n";
print "ファイルの...続きを読む

Aベストアンサー

# > ・・という文章が出力されないのですが、

# ↑どこに出力されないのか? というか、
# エラーメッセージを通常どこで確認しているかが不明ですが、


# エラーメッセージを標準エラーメッセージファイル"STDERR"以外に、
# 画面にも出力するように指定する。
use CGI::Carp qw(fatalsToBrowser);

my $filename = '/usr/local/apache/htdocs/aaa/bbb/a_perl_read_writes.txt';
open (FILEHANDLE,"< $filename") or die "$filenameを開けません。";

# 上記を、手元の
#  WinXP Pro.SP2 + Apache 1.3 + ActivePerl 5.8.4(810) + shift-jis
# で試すと画面(ブラウザ)に以下が出ます。

# (結果)
# /usr/local/apache/htdocs/aaa/bbb/a_perl_read_writes.txtを開けません。at c:\apache\cgi-bin\nu\hoge.pl line nn.

# key word : Perl STDERR, use CGI::Carp

# > ・・という文章が出力されないのですが、

# ↑どこに出力されないのか? というか、
# エラーメッセージを通常どこで確認しているかが不明ですが、


# エラーメッセージを標準エラーメッセージファイル"STDERR"以外に、
# 画面にも出力するように指定する。
use CGI::Carp qw(fatalsToBrowser);

my $filename = '/usr/local/apache/htdocs/aaa/bbb/a_perl_read_writes.txt';
open (FILEHANDLE,"< $filename") or die "$filenameを開けません。";

# 上記を、手元の
#  WinXP Pro.SP2 + Apac...続きを読む

Q沿道サービス業とは?

すごく気に入った土地があるのですが、
農家資格または、沿道サービス業でないと
購入できないそうです。
沿道サービス業にはどんな種類があるのでしょうか?
詳しく教えていただけると助かります。
よろしくお願いいたします。

Aベストアンサー

>沿道サービス業にはどんな種類があるのでしょうか?

http://www.pref.aichi.jp/kenchikushido/5/kaihatu0_2.htm
都市計画法の34-8
(8) 道路の円滑な交通を確保するために適切な位置に設けられる給油所・ドライブイン等の施設。(9号)

基本的に
敷地が500m2以上

ドライブイン=飲食店
と覚えましょう。

500m2以下は
34-1で対応できます。

(1) 日常生活上必要な物品の販売、加工、修理を営むための店舗等の施設及び公益上必要な建築物

うちの県基準で
34-1の業種一覧です。

店舗等の用途は、別表に掲げるものとする。
http://www.pref.aichi.jp/kenchikushido/5/34-1beppyou.html

>沿道サービス業にはどんな種類があるのでしょうか?

あなたが言う
沿道サービスとは
34-1のことで
専門家が言う
沿道サービスとは
34-8のと
根本的に違います。

Q$yerr = "$year (Y)"; と記述していいでしょうか?

「" "」の中で、かっこ「( )」を使っても問題ないですか?
エスケープが必要でしょうか?

Aベストアンサー

> $yerr = "$year (Y)";
のような、単なる文字列の文字としてカッコを使う分には、エスケープの必要はありません。
エスケープしなければならないのは、「$ 自身」と「@ 自身」くらいでしょう。
(これらは "~" の中では変数展開されてしまうので、エスケープする必要があります。)


人気Q&Aランキング