linuxで、sendmailコマンドの使い方を教えていただけますか。

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

A 回答 (4件)

man sendmail



質問の内容だけですと何を知りたいのかが不明です。
全てを説明するのであれば本が1冊出来上がるかと思います。

この回答への補足

(1)ネットで、例がいくつ見つかりましたが、タイトルの名を以下のように設定されます。
$ cat mail_header.txt | nkf --mime >> tmp.mail_header.txt

上記の設定方法で、nkfのインストールが必要です。私はiconvコマンドをここで、利用してほしいですが、できますか。
例のアドレス:http://q.hatena.ne.jp/1182165366
(2)ネットの例によって、sendmailを実行する場合、たくさんの設定が必要です。例:Content-Typeとか。そうするか、シェルで、sendmailを利用すると、すごく手数がかかります。
 この設定はsendmailのプロパティファイルで、設定できますか。またはどうやって設定できますか。

補足日時:2009/05/12 10:55
    • good
    • 1

nkf を別環境でコンパイルして


作業用ディレクトリに配置はだめなんですか?
スクリプト等を利用するのであれば$PATHの位置に配置しなければ
問題は無いかと思いますがいかがでしょう?
    • good
    • 0

だんだん的外れな方向に行くのを傍観しててもよかったのですが…。



>$ cat mail_header.txt | nkf --mime >> tmp.mail_header.txt
>上記の設定方法で、nkfのインストールが必要です。私はiconvコマンドをここで、利用してほしいですが、できますか。

nkfと全く同じ…というのは無理かも知れませんが。
Subjectヘッダのエンコードなら、
SUBJECT="Subject: =?iso-2022-jp?B?"`echo "日本語" | iconv -t ISO2022JP | base64`"?="
って感じでシェル変数に代入可能かと。
ただし、長すぎる場合に改行を挟む。というのが正しく動作しませんが。
# base64コマンドが改行してくれますが、MIMEエンコードとしては正しくない。

php使用可能ならば、
php -r 'echo iconv_mime_encode( "Subject", "日本語", array("input-charset" => "UTF-8", "output-charset" => "ISO-2022-JP"));'
とするとか。

>(2)ネットの例によって、sendmailを実行する場合、たくさんの設定が必要です。例:Content-Typeとか。そうするか、シェルで、sendmailを利用すると、すごく手数がかかります。
> この設定はsendmailのプロパティファイルで、設定できますか。またはどうやって設定できますか。

すでに別のところで回答されていますが…
エンコーディングなどはクライアント側のお仕事です。
sendmailに渡し前にシェルスクリプトなどで整形するべきです。
# カラー表示対応のエスケープシーケンスの除去なども
# http://oshiete1.goo.ne.jp/qa4943407.html
# で回答ついていますけど。

Redhat系ならば…
/etc/init.d/functionsに
# This all seem confusing? Look in /etc/sysconfig/init,
# or in /usr/doc/initscripts-*/sysconfig.txt
なんてコメントがあります。
/etc/sysconfig/initを編集することで、「[ OK ]」等のカラー出力を抑制できるみたいですが…。
    • good
    • 0

コマンドラインでコンバート処理するならnkfが一番だとおもいますが


インストールできない理由があるのでしょうか?

Eメールはいろいろ制限も多いので自己解決ができないようであれば
なにかのライブラリ(たとえばperlやphpなど)で処理するのが
よろしいかと。

この回答への補足

sendmailコマンドを利用する際に、かなり多くの設定があります。
こういう設定はsendmail.cfとかの中で、設定できますか。

補足日時:2009/05/12 13:27
    • good
    • 0

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

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

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

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

Q【シェルスクリプト】 for文で単語分割させたくない

シェルスクリプトのfor文で単語分割させないで、一行ずつ処理させるにはどうすればよいのでしょうか。

----------
$ ca file
test1 test1
test2 test2
test3 test3
----------
#!/bin/bash
for i in `cat file`
do
echo $i
done
----------
「test1 test1」、「test2 test2」、「test3 test3」といった具合に、行単位で処理したいです。
しかし結果は
test1
test1
test2
test2
test3
test3
と単語分割されてしまいます。
空白を含んでいる場合に行単位で処理するにはどうすればよいのでしょうか。

Aベストアンサー

セパレータはIFSで指定します。デフォルトは、空白・タブ・改行です。

#!/bin/bash
IFS=$'\n'
for i in `cat file`
do
IFS=$' \t\n'
echo $i
done

while read i;do echo $i;done < file とやるのが普通です。

Qコマンドプロンプトで、linuxのlocateコマンドのようなコマンドはありますか?

vista ultimateを使っています。

端的にいうと、
Cドライブ配下全体で、.log,.msi.install.exe,setup.exe
のどれかの文字列を含むファイル一覧を表示させたいと思っています。
(できれば、

☆含むではなく、
.logで終わる
or
.msiで終わる
or
install.exeと完全一致
or
setup.exeと完全一致

☆なおかつ、できれば、大文字小文字を区別しない

☆なおかつ、できれば、結果は、ファイル名だけでなく、フルパスで知りたい

と思っています。

で、いま、vistaが立ち上がらないエラーが起きているので、
vistaのメディアから、コマンドプロンプトで、
それを実行しようとしています

そこで。。。一案ですが・。。
コマンドプロンプトで、
linuxのlocateコマンドのようなコマンドはありますか?
findというのがそれかなと思ったのですが、
linuxにおけるgrepと同じようでして。

ご存知の方いらっしゃいましたら、よろしくお願いします。

vista ultimateを使っています。

端的にいうと、
Cドライブ配下全体で、.log,.msi.install.exe,setup.exe
のどれかの文字列を含むファイル一覧を表示させたいと思っています。
(できれば、

☆含むではなく、
.logで終わる
or
.msiで終わる
or
install.exeと完全一致
or
setup.exeと完全一致

☆なおかつ、できれば、大文字小文字を区別しない

☆なおかつ、できれば、結果は、ファイル名だけでなく、フルパスで知りたい

と思っています。

で、いま、vistaが立ち上がらないエラーが起きて...続きを読む

Aベストアンサー

C:
CD \
DIR /S /P *.log
DIR /S /P *.msi
DIR /S /P install.exe
DIR /S /P setup.exe

QARCserve Agent for Open Filesをお使いの方

稼働中のサーバで、ARCserve r11.1本体と、Agent for Open Files、
Disaster Recovery Optionが入っています。

今回、このサーバで稼働中のAPに対して、パッチをあてることになりましたが、不安要素もあるため、パッチ前のサーバの状態をバックアップしておき、パッチ後問題があれば、元の状態に戻せるようにしておきたいと思います。

Disaster Recovery Optionを使うほどではないと思いますので、Agent for Open Filesで、Windwosのシステムも含めてすべてバックアップしておけばよいのかなと思います。

Agent for Open Filesをお使いの方で、このような使い方をされている方がいらっしゃれば、使い方/注意点など、ご教示頂きたくお願い致します。

Aベストアンサー

バックアップ時間は環境(大きな影響を与えるのはテープ装置、Disk装置、ファイルの大きさと数)によって全く異なります。
下記は評価用データファイル(固定長ランダムデータ内容をファイルを数万個用意)での測定経験値ですので参考程度にしていただき、実際の環境で試して確認するべきです。
LTO(1-3)+IDE(SCSI)Disk = 1,000MB/分、FCやSASのDiskなら1,500-2,000over/分も可能
DAT72+SAS Disk = 200から300MB/分程度

QLinux初心者です。cpコマンドの使い方について質問させてください。

Linux初心者です。cpコマンドの使い方について質問させてください。

あるディレクトリ(dirA)の中身を、隠しファイルも含めてすべて、
別のディレクトリ(dirB)の配下へとコピーしたいのですが、
======================================================
> cp dirA/* dirB
とすると、隠しファイルがコピーされず、
> cp dirA dirB
とすると、dirBの配下に新たにdirAが作られてしまいます。
======================================================
コピー元のdirAとコピー先のdirBを統合して、なおかつ
隠しファイルもコピーしたいのですが、
> cp dirA/* dirB; cp dirA/.* dirB
のようにコマンドを二つに分けるしかないのでしょうか。

一つのコマンドでできる方法がありましたら、
ご教授お願いします。

Aベストアンサー

cp dirA/{.*,*} dirB

マニュアルを読めば、cpには 複数ファイルを指定してディレクトリへコピーする、という書式があることがわかります。
それに従えば
(1) cp dirA/.なんたら1 dirA/.なんたら2 ... dirA/かんたら1 dirA/かんたら2 ... dirB
とコピーしたいファイルを列挙して、最後にコピー先のディレクトリを指定、となります。

これは、ファイルが増えると面倒です。

そこで、シェルには、特殊な記法を使ったときに、それに合致するファイル名一覧に変換する機能があります。
その一つが 任意の文字列に一致する * です。
この置換はコマンドに渡す前に行われます。cpは、 *が使われたかどうか等は知りませんし知る必要もありません。

そこで、(1)を変形させていくのですが、御存じの通り、 .で始まるファイルは * にマッチしません。そこで、 .で始まるファイルとそうでないものとに分けた結果が1行目です。{}はカンマで区切ったいずれかにマッチします。
*.{h,cpp} として、C++のソースが対象、といった使い方をします。

シェルや設定によっては、*が.で始まるファイルにマッチしたり、より高度なパターンがあったりしますが、比較的一般に使えるやりかたを紹介いたしました。

cp dirA/{.*,*} dirB

マニュアルを読めば、cpには 複数ファイルを指定してディレクトリへコピーする、という書式があることがわかります。
それに従えば
(1) cp dirA/.なんたら1 dirA/.なんたら2 ... dirA/かんたら1 dirA/かんたら2 ... dirB
とコピーしたいファイルを列挙して、最後にコピー先のディレクトリを指定、となります。

これは、ファイルが増えると面倒です。

そこで、シェルには、特殊な記法を使ったときに、それに合致するファイル名一覧に変換する機能があります。
その一つが 任意の文字...続きを読む

Qシェルスクリプトだと動かない [ -L fileS ] && echo "シンボリックリンクです"

コマンドライン上で
カレントディレクトリにある fileS がシンボリックリンクであるか調べる事ができるか、学習しております。コマンドライン上で
[ -L fileS ] && echo "シンボリックリンクです"
と打つと、動作する事を確認しました。
しかし、シェルスクリプトで(slink.sh)
=======================

#!/bin/sh
[ -L fileS ] && echo "シンボリックリンクです"

=======================
と、同ディレクトリにスクリプトファイルを作成。
chmod ug+x slink.sh して
./slink.sh と打つと
slink.sh: test: 引数が足りません。
と怒られます。
どこがどのように間違っているかわからないので
ご教授いただけないでしょうか
お願い致します。

Aベストアンサー

Debian Linux kernel 2.6.21.4で確認しましたが、ちゃんと動きました。

#! /bin/sh
test -L fileS &&echo "シンボリックリンクです"
と書いてもエラーになるのでしょうか?

Qlinuxでのmp3gainコマンドの使い方

を教えてください

700個のmp3ファイルfile1,file2,file3,…,file700の音量をノーマライズするときに

#mp3gain -r file1
#mp3gain -r file2
#mp3gain -r file3
・・・・・・・・・
#mp3gain -r file700

でOKでしょうか?それとも

#mp3gain -r file1 file2 file3 … file700

としなければならないでしょうか?
後者だとファイル数が700個あるのでシェルスクリプトを作るのが大変です
(IFSをセットしているため)
前者でよいのならば簡単なのですが

よろしくお願いします

Aベストアンサー

http://chirijiri.blog17.fc2.com/blog-entry-19.html
ほらよ。
ループでない処理のパターン。
findを使ってファイル名検索とパイプを使った方法。

>引数が1ファイルなので
各ファイルの平均値を出すのではなくて上記のサイトを見る限り89dbで自動的に調整するだけみたい。

それとコマンドのオプションがわからなければman使えよ。
dbの値を調整するオプションもあるみたいだな。
最近の奴はmanを知らないのか?それとも自分でmanする気がないのか?

Qシェルスクリプトのfor分の構文

○プログラムの内容
#!/bin/sh

files=(`ls *.dat -1`)
for file in ${files[@]}
do
a=`echo $file | cut -c1-4`
b=`echo $file | cut -c5-6`
c=`echo $file | cut -c7-8`
d=`echo $file | cut -c9-10`
e=`echo $file | cut -c11-12`
f=`echo $file | cut -c13-14`
echo $file >> list3.txt
cp $file input.dat

now_filename=`cat $filename | cut -c1-14`
if [ "$before_filename" -eq "$now_filename" ] ; then
echo eq $before_filename $now_filename
else

./polar
convert -font /usr/share/fonts/liberation/LiberationSans-Bold.ttf -fill
white -pointsize 10 -gravity north -annotate 0x0+180+5 "$a/$b/$c $d:$e:$f"
r_theta.ppm r_theta.png

convert -font /usr/share/fonts/liberation/LiberationSans-Bold.ttf -fill
white -pointsize 10 -gravity north -annotate 0x0+180+5 "$a/$b/$c $d:$e:$f"
r_theta.ppm r_theta.png

echo -n > line_noise_theta.dat
./diff.sh

awk -f ref.awk out_diff.dat
flag=`cat ref_print.dat | cut -d ' ' -f5`
if [ $flag -eq 1 ] ; then
sigma=`cat ref_print.dat | cut -d ' ' -f2`
sigma3=`echo "$sigma * 2" | bc`
for ab in `seq 1 256`
do
sum=`cat out_diff.dat | head -$ab | tail -1 | cut -d ' ' -f2`
true=`echo "($sum > $sigma3)" | bc`
if [ $true -eq 1 ] ; then
echo $ab >> line_noise_theta.dat
fi
done
fi
echo `du -lb line_noise_theta.dat` > filesize.dat
  echo `du -lb $filename` > filesize_1ST.dat

./real
done

○エラー内容
syntax error near unexpected token `done'
`done'

少し抜粋していますが、ここのfor文が実行されていなくて、doneのエラー内容は一番最後のdoneをさしています。
ちょっとしたミスではないかなと思いますが、いろいろ直しても変わらなかったのでご教授お願いします。

○プログラムの内容
#!/bin/sh

files=(`ls *.dat -1`)
for file in ${files[@]}
do
a=`echo $file | cut -c1-4`
b=`echo $file | cut -c5-6`
c=`echo $file | cut -c7-8`
d=`echo $file | cut -c9-10`
e=`echo $file | cut -c11-12`
f=`echo $file | cut -c13-14`
echo $file >> list3.txt
cp $file input.dat

now_filename=`cat $filename | cut -c1-14`
if [ "$before_filename" -eq "$now_filename" ] ; then
echo eq $before_filename $now_filename
else

./pola...続きを読む

Aベストアンサー

if と fi の対応が取れてないようにも思えます

Qlinux cp コマンドの使い方

linux で質問です。
○○ディレクトリ以下のaまたはbではじまるディレクトリを除くファイルを△△ディレクトリに全てコピーとあるのですが、どのように組み立てたらよいでしょうか?

Aベストアンサー

> cd ○○ディレクトリ
> cp `find . -name "[ab]*" -print` △△ディレクトリ

QFileSystemObject & For Eachループで・・・

皆様こんにちは!

VBAでプログラムを作っていて不明点があり困っています。
FileSystemObjectを使用してあるフォルダにあるサブフォルダ内のすべての
ファイルをコピーしフォルダを削除する処理を作成しています。


Set objFolder = objFs.GetFolder("C:\TEST")

For Each objSubFolder In objFolder.subfolders 'TESTフォルダ内にあるサブフォルダ獲得
For Each objFile In objSubFolder.Files 'サブフォルダ内のファイル獲得
ON Error Go To CopyErr
objFs.CopyFile(objFile.Path,"コピー先名") 'ファイルコピー処理
ON Error Go To 0
Set objFile = Nothing
Next
Set objSubFolder = Nothing
Next

Set objFolder = Nothing
objFs.DeleteFolder("C:\TEST") 'TESTフォルダ削除
Set ObjFs = Nothing
exit sub

CopyErr:
Set objFile = Nothing
Set objSubFolder = Nothing
Set objFolder = Nothing
objFs.DeleteFolder("C:\TEST")
Set ObjFs = Nothing
end sub

上の様な処理でファイルのコピーでエラーが発生し
CopyErrへ飛んだ場合、TESTフォルダの削除時に
”書込みできません”とエラーが発生し
TESTフォルダが削除できません(その中のサブフォルダは削除されます)。
正常にFor Each文を抜けた場合は問題なく削除するので解せません。
For EachからはGo To,Exit等で抜けるとまずいのでしょうか?
上の様な処理を作成しようと思えば、Dirを使用した方がいいのでしょうか?
(Nothingの処理は元々なかったのですが、
この現象が出たため試しにつけてみたものです。)

どなたかアドバイスをお願い致します。

皆様こんにちは!

VBAでプログラムを作っていて不明点があり困っています。
FileSystemObjectを使用してあるフォルダにあるサブフォルダ内のすべての
ファイルをコピーしフォルダを削除する処理を作成しています。


Set objFolder = objFs.GetFolder("C:\TEST")

For Each objSubFolder In objFolder.subfolders 'TESTフォルダ内にあるサブフォルダ獲得
For Each objFile In objSubFolder.Files 'サブフォルダ内のファイル獲得
ON Error Go To CopyErr
objFs.CopyFile(objFile.Path,"コピー先名"...続きを読む

Aベストアンサー

かなり自信がありませんが・・・・勝手な推測です・・・

おそらくVBのバグだと思います。
FSOは内部でファイルの存在チェックを行っておりますが、きっとうまく開放してないのだと思います。

それ以前に気になったのですが、エラー処理で削除を走らせていますよね?
これはコーディング的にあまりよくないと思います。

特に現在のロジックでエラーに飛ぶ処理は、「コピーの失敗」という状況であり、コピーもできないのに削除というアクションをおこそうとしています。これはVBのバグをおこしやすいプログラムに見えます。
このようなエラーで飛んだ場合は、あくまでオブジェクトの初期化や、フラグの制御など以外の処理をしないように努めたほうが健全だと思います。それを一つの関数として、そのステータス次第で処理を分岐したほうがよいと思います。


サンプルを載せておきます。
ちなみに私の環境(WIN2000SP3/VB6SP5)ではステップ実行だと、なぜか失敗します。


Private Sub Command1_Click()
  Const DEF_DIR As String = "C:\TEST"

  Dim objFs    As FileSystemObject
  Dim blnFlg   As Boolean
  
  Set objFs = New FileSystemObject
  
  blnFlg = funcCopy(objFs, DEF_DIR)
  If Not blnFlg Then
    Debug.Print "失敗"
  End If
  Call objFs.DeleteFolder(DEF_DIR)
End Sub

Private Function funcCopy(objFs As FileSystemObject, inFolderPath As String) As Boolean
  On Error GoTo PGMERR
  
  Dim objFolder    As Folder
  Dim objSubFolder  As Folder
  Dim objFile     As File
  
  Set objFolder = objFs.GetFolder(inFolderPath)
  
  For Each objSubFolder In objFolder.SubFolders
    For Each objFile In objSubFolder.Files
      Call objFs.CopyFile(objFile.Path, "コピー先名")
      GoTo PGMERR
    Next
  Next
  
  funcCopy = True
PGMEND:
  Set objFile = Nothing
  Set objSubFolder = Nothing
  Set objFolder = Nothing
  Exit Function
PGMERR:
  funcCopy = False
  GoTo PGMEND
End Function

かなり自信がありませんが・・・・勝手な推測です・・・

おそらくVBのバグだと思います。
FSOは内部でファイルの存在チェックを行っておりますが、きっとうまく開放してないのだと思います。

それ以前に気になったのですが、エラー処理で削除を走らせていますよね?
これはコーディング的にあまりよくないと思います。

特に現在のロジックでエラーに飛ぶ処理は、「コピーの失敗」という状況であり、コピーもできないのに削除というアクションをおこそうとしています。これはVBのバグをおこしやすいプロ...続きを読む

Q「mail」コマンドと「sendmail」コマンドについてのくだらない質問です

よろしくお願いします。
電子メールの送受信を行う「mail」コマンドというのがあるのですが、そのほかに「sendmail」というコマンドがあるようです。
この「sendmail」もメールの送受信に使うコマンドでしょうか。
ちなみに、うちの自宅サーバでは「mail」コマンドは使えますが「sendmail」コマンドが使えません。
$ /usr/lib/sendmail
というようにフルパスで指定してもダメでした。
5分経っても10分経っても次のプロンプトが表示されずに反応が無くなってしまいますので「Ctrl」+「c」キーで強制的にプロンプトを表示させるしかありません。
ひょっとして最近コマンド名が変わったとか、そういうことでしょうか。

ディストリビューションはRed Hat Linux8.0で
SMTPサーバはsendmail-8.12.5-7.i386.rpmとかいうものです。
どなたか教えてください。

Aベストアンサー

vオプションと宛て先を指定して起動し、メール本文、「.」(ピリオド)で完了です。

マシンのFQDN:hogehoge.somedomain.net
ユーザ名  :honyarara
だとするとこうなります。

-------------------------------------------
$ /usr/lib/sendmail -v honyarara@hogehoge.somedomain.net
This is test mail  <-- メール本文
.          <-- ピリオドのみ
-------------------------------------------

ひょっとしたら root権限が必要かも。


人気Q&Aランキング

おすすめ情報