
use strict;
use warnings;
use MIME::Lite;
use Jcode;
my $from = 'usui@*******'; # 送信元
my $to = 'yamada@******'; # 送信先
my $path = '.'; # 添付するファイル(このファイルを読み込む)
my $filename = 'CIMG0020.JPG'; # 添付ファイル名(このファイル名でメールに添付する)
my $type = 'image/jpeg'; # 添付ファイルタイプ
my $subject = '++++++++++++++++++++'; # サブジェクト
my $message = '-------------------------'; # 本文
# メールサーバの指定(省略時はsendmailコマンドを使用する)
MIME::Lite->send('smtp', '88888888');
$subject = jcode($subject)->mime_encode();
$message = jcode($message)->jis;
my $msg = MIME::Lite->new(
From => $from,
To => $to,
Subject => $subject,
Type => 'multipart/mixed',
);
$msg->attach(
Type => 'text/plain; charset="iso-2022-jp"',
Encoding => '7bit',
Data => $message,
);
$msg->attach(
Type => $type,
Path => $path,
Filename => $filename,
Disposition => 'attachment',
);
$msg->send;
上記で最後の$msg->sendで
open .: Permission denined
のエラーが出る
問題の原因と修正個所の指摘をお願いします。
No.7ベストアンサー
- 回答日時:
ファイル名というのは「ファイルの名前」です。
中身と関係のある名前を付けるのが慣例ですが、実際のところ、名前と中身は関係ありません。
Path というと、何となく「ディレクトリ」を思い浮べますが、それに限定された訳ではありません。
ファイルやディレクトリの位置を指定するものが「パス」です。
hoge\fuga\foo.bar みたいなのもファイル名と言ったりしますが、 本来のファイル名なのは foo.bar です。
で、MIME::Liteで、 Path は「中身」の指定、 FileName は「名前」の指定です。
ってあたりが、ちゃんとマニュアルに書いてあります
> Filename
> Optional. The name of the attachment.
(オプション) 添付ファイルの「名前」
> You can use this to supply a recommended filename for the end-user who is saving the attachment to disk.
これを使って、受け取った人がセーブするときに使って欲しい名前を指定することができる。
>Path
> Alternative to "Data" or "FH".
> Path to a file containing the data...
「データの入ったファイルへのパス」
> actually, it can be any open()able expression.
open関数で使える式(パイプラインとか)でもよい。
> If it looks like a path, the last element will automatically be treated as the filename.
ファイルパスっぽく見えるものの場合、最後の部分を「ファイル名」として使う
また、サンプルコードにも次のようなものがちゃんと書いてあります。
Path =>'aaa000123.gif',
Filename =>'logo.gif',
※「 aaa000123.gif の中身を送るけど、名前はlogo.gifを使ってね」
Path => "gzip < /usr/inc/somefile.tar |",
Filename => "somefile.tgz"
※ Pathはgzipコマンドの実行結果で「ファイル」ではない
なんかおかしい、と思ったら、公式の(できないのなら、できるかぎり公式に近い)マニュアルを読みましょう。
有難う御座います。
最初は、Pathと言うのはディレクトリーと思っていましたが。例示で
は、実際に送るファイル名と書かれている。然し、Pathは通常ディレク
トリーの筈だと思いそのままディレクトリーを指定して、Filenameに実際
のファイル名を指定しました。
然し、これを動かすとパーミッションのエラーが出ます。そこで、嵌り
ました。然し、例文の殆どがPathに実際のファイル名が指定をされてい
るので、それに従い実際のファイル名を指定をすると動きました。
然し、その時に今度はFilenmaeで指定をした実際に送るファイル名は何
の影響も有りません。それで、ではこの場合のFilenmaeとは何だったの
かと言う疑問に当たりました。
Filenameの語句がPseudo_Filenameと書かれていれば理解を出来たので
すが。また、ここでは輪を掛けてのPathと言うのが有りますので。二重
に嵌ってしまいました。
英文のマニュアルを理解をすれば良いのでしょうが。中々に私のスキル
不足で時間が取れなくてすみませんでした。
私を馬鹿にして下さった方と言うのは、このような説明を今後やって貰
いたいと思います。きちんと質問者に分かる回答をして馬鹿にするのは
結構ですが。
若しも、説明が出来ないのであれば。質問者の方は貴方も実は分かって
無いのですよね。と思いますよ。類は類を呼ぶと言いますので余り過激
な回答は御遠慮願います。
No.6
- 回答日時:
Filename の意味は, #5 に挙がっている
http://search.cpan.org/~yves/MIME-Lite-3.01/lib/ …
や
http://www2u.biglobe.ne.jp/~MAS/perl/waza/mailat …
に書いてあります. RTFM.
No.5
- 回答日時:
>この場合のPathと言うのは、添付するファイルの属するディレクトリー
>を指定します。
では、コメントの「添付するファイル(このファイルを読み込む)」は嘘だし、ネット上のサンプルも嘘というわけですね。
おそらく参考にしたページは
http://www2u.biglobe.ne.jp/~MAS/perl/waza/mailat …
かと思われますが。
リファレンスは…
http://search.cpan.org/~yves/MIME-Lite-3.01/lib/ …
かな。
リファレンス違反ということですからサンプルコード書いているページに苦情を上げるべきでしょうか?
というか、貴方の解釈が間違っている。
という可能性の方が高いと思われるのですが、その辺りはどうお考えで?
有難う御座います。
一応、動いたには動いたのですが。
Pathはここでは実際に添付するファイル名の様です。
それで、Filenameも添付するファイル名と想定をして送ったのですがこ
のファイルは送信をされていません。
それで、Pathのみを指定してFilenameを外して送信した所これのみの指
定でも正常に送信が出来ました。
一応、送れたのは送れたのですが。益々分からなくなりました。
このFilenameと言うのは何なのでしょうか。
ここでは、Pathと言うのはディレクトリーでは無い様です。
そして、このFilenameと言うのもファイル名では無い様です。
この辺の言葉尻が分かりません。最後はここだけが分かりませんので宜
しければ回答を願います。
宜しくお願いします。
No.4
- 回答日時:
Windows7 にパーミッションは存在する (そしてその種類は Unix より多い) けど, それはさておき
$msg->attach(
Type => $type,
Path => $path,
Filename => $filename,
Disposition => 'attachment',
);
が何を意味するか改めて考えた方がいいと思う. 主に
my $path = '.'; # 添付するファイル(このファイルを読み込む)
とのからみだけど.
この場合のPathと言うのは、添付するファイルの属するディレクトリー
を指定します。
Filenameと言うのは、そのPath配下にあるファイル名を指定すると言う
事になります。
指定に間違いは無いと思うのですが。
No.3
- 回答日時:
>Windows7では、確かパーミッションと言うのは無い様に思うのですが
>どうなんでしょうか。
既に回答ついてますが…アクセス権の設定はありますよ。
UNIX系とは異なりますが。
で、本来の問題は「ディレクトリをファイルとしてアクセスはできない」からじゃないですかね?
入力ファイル名が"."だけでは、「カレントディレクトリ」が入力ファイルになりませんか?
さて、ディレクトリをどうやってファイルとして扱いましょうか。
ディレクトリエントリでも返しますか?(UNIX系だとこちらになる場合が…)
ディレクトリ内の全ファイルとして返しますか?
No.2
- 回答日時:
No.1です。
> Windows7では、確かパーミッションと言うのは無い様に思うのですが
どうなんでしょうか。
ありますよ。
エクスプローラーで適当なファイルを選んで右クリックし、プロパティを見てください。
表示されたダイアログのセキュリティーのタグをクリックして内容を見ると。。。
有難う御座います。
このperlのファイルが有る所に添付ファイルを置いていますので
$path='.';
としています。
このperlのファイルが有るプロパティのセキュリティのタブをクリック
して中身を見ると、
グループ名は、system
systemのアクセス許可は、
フルコントロールは、許可
変更は、許可
読み取りと実行は、許可
フォルダー内容の一覧表示は、許可
読み取りは、許可
書き込みは、許可
となっています。ここでは、最後の特殊なアクセス許可はチェックは付
いていません。
これが影響をしているのでしょうか。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- CGI perlで書いたcgiでsqliteの使い方を教えてください 2 2023/05/08 21:29
- CGI htmlからパラメータで、cgiに渡したい。 1 2023/02/06 16:15
- その他(プログラミング・Web制作) laravel 本番環境でメールが送れません。 1 2023/02/17 17:57
- PHP imageフォルダに、画像をリサイズして保存する時のファイル名を変更したい 1 2023/05/30 11:39
- Visual Basic(VBA) エクセルのマクロを使ってメールを送る方法について教えてください 2 2022/03/29 01:36
- その他(クラウドサービス・オンラインストレージ) Google ColabでGoogleドライブのサブフォルダにファイルを生成する方法 1 2022/10/31 17:37
- JavaScript Javascriptが機能せず原因が分からないので教えて頂きたいです 3 2023/06/04 14:50
- その他(SNS・コミュニケーションサービス) 自分のpcがハッキングされたようなメールが来たのですがどうすればいいですか? 4 2022/10/02 16:14
- Perl Perl の外部モジュールの利用方法 3 2022/07/10 18:34
- HTML・CSS CSSが効かずどのように指定すれば良いか分からないのでアドバイスお願い致します 2 2023/06/07 12:25
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
どんなプログラムを書いても指...
-
fopenで別ディレクトリにファイ...
-
絶対パスの絶対て英語で何でし...
-
FTPでputすると空ファイルが出...
-
フルパスから最後のディレクト...
-
「UNCパスはサポートされません...
-
GetPrivateProfileStringでini...
-
セルに入力されたパスでフォル...
-
Visual Studio 2008コマンドプ...
-
ネットワーク上のコンピュータ...
-
ThisWorkbook.Pathについて
-
ファイルダイアログのカレント...
-
C#でカレントディレクトリの取...
-
Excel2013 FSO.getAbsolutePath...
-
windows.hがincludeされない
-
C#でのディレクトリ指定時のユ...
-
Ubuntu テキストファイルをどこ...
-
ExcelVBA サーバーの(共有フォ...
-
簡単にファイルやディレクトリ...
-
C言語を用いたファイルの一括削...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
どんなプログラムを書いても指...
-
フルパスから最後のディレクト...
-
「UNCパスはサポートされません...
-
FTPでputすると空ファイルが出...
-
絶対パスの絶対て英語で何でし...
-
fopenで別ディレクトリにファイ...
-
ExcelVBAでカレントディレクト...
-
ファイルやディレクトリの存在...
-
windows.hがincludeされない
-
セルに入力されたパスでフォル...
-
ネットワーク上のコンピュータ...
-
Ubuntu テキストファイルをどこ...
-
C言語を用いたファイルの一括削...
-
webアプリケーションでの画像フ...
-
新規作成ファイルパスが有効か...
-
ファイルダイアログのカレント...
-
ExcelVBA サーバーの(共有フォ...
-
GetPrivateProfileStringでini...
-
エクセルVBAで相対パスでファイ...
-
マイクラでPythonのプログラミ...
おすすめ情報
Filenameでファイル名を指定しても実際はファイルは送信されない。な
ので、この場合のファイル名とは何の指定をしているのかと言う事を聞
いています。
ここでは、単に言葉の遊びでのFilenameの意味を問うているのでは有り
ません。Filenameと言うのはファイル名の事ですが。ここで言う所の
ファイル名と言うのは、当然に送信する時に指定をする添付ファイルの
ファイル名となる筈ですが。
実際は、何の動作もここではやりません。だから、ここで指定をする所
のファイル名とは何なんですかと言う事を聞いています。
宜しく、お願いします。