アプリ版:「スタンプのみでお礼する」機能のリリースについて

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
のエラーが出る

問題の原因と修正個所の指摘をお願いします。

質問者からの補足コメント

  • うーん・・・

    Filenameでファイル名を指定しても実際はファイルは送信されない。な
    ので、この場合のファイル名とは何の指定をしているのかと言う事を聞
    いています。

    ここでは、単に言葉の遊びでのFilenameの意味を問うているのでは有り
    ません。Filenameと言うのはファイル名の事ですが。ここで言う所の
    ファイル名と言うのは、当然に送信する時に指定をする添付ファイルの
    ファイル名となる筈ですが。

    実際は、何の動作もここではやりません。だから、ここで指定をする所
    のファイル名とは何なんですかと言う事を聞いています。

    宜しく、お願いします。

    No.6の回答に寄せられた補足コメントです。 補足日時:2015/12/03 22:23

A 回答 (7件)

添付したいファイルのパーミッションならびに、そのファイルが行かれているディレクトリのパーミッションはどうなっているのでしょうか?


エラーメッセージ的に添付したいファイルのオープンでアクセス権が無いと言っているわけですよね。。。
    • good
    • 0
この回答へのお礼

有難う御座います。
実は、Windows7で動かしています。

Windows7では、確かパーミッションと言うのは無い様に思うのですが
どうなんでしょうか。

お礼日時:2015/12/03 13:35

No.1です。



> Windows7では、確かパーミッションと言うのは無い様に思うのですが
どうなんでしょうか。

ありますよ。
エクスプローラーで適当なファイルを選んで右クリックし、プロパティを見てください。
表示されたダイアログのセキュリティーのタグをクリックして内容を見ると。。。
    • good
    • 0
この回答へのお礼

有難う御座います。
このperlのファイルが有る所に添付ファイルを置いていますので
$path='.';
としています。

このperlのファイルが有るプロパティのセキュリティのタブをクリック
して中身を見ると、
グループ名は、system
systemのアクセス許可は、
フルコントロールは、許可
変更は、許可
読み取りと実行は、許可
フォルダー内容の一覧表示は、許可
読み取りは、許可
書き込みは、許可

となっています。ここでは、最後の特殊なアクセス許可はチェックは付
いていません。

これが影響をしているのでしょうか。

お礼日時:2015/12/03 14:14

>Windows7では、確かパーミッションと言うのは無い様に思うのですが


>どうなんでしょうか。

既に回答ついてますが…アクセス権の設定はありますよ。
UNIX系とは異なりますが。

で、本来の問題は「ディレクトリをファイルとしてアクセスはできない」からじゃないですかね?
入力ファイル名が"."だけでは、「カレントディレクトリ」が入力ファイルになりませんか?
さて、ディレクトリをどうやってファイルとして扱いましょうか。
ディレクトリエントリでも返しますか?(UNIX系だとこちらになる場合が…)
ディレクトリ内の全ファイルとして返しますか?
    • good
    • 0

Windows7 にパーミッションは存在する (そしてその種類は Unix より多い) けど, それはさておき


$msg->attach(
Type => $type,
Path => $path,
Filename => $filename,
Disposition => 'attachment',
);
が何を意味するか改めて考えた方がいいと思う. 主に
my $path = '.'; # 添付するファイル(このファイルを読み込む)
とのからみだけど.
    • good
    • 0
この回答へのお礼

この場合のPathと言うのは、添付するファイルの属するディレクトリー
を指定します。

Filenameと言うのは、そのPath配下にあるファイル名を指定すると言う
事になります。

指定に間違いは無いと思うのですが。

お礼日時:2015/12/03 14:26

>この場合のPathと言うのは、添付するファイルの属するディレクトリー


>を指定します。

では、コメントの「添付するファイル(このファイルを読み込む)」は嘘だし、ネット上のサンプルも嘘というわけですね。
おそらく参考にしたページは
http://www2u.biglobe.ne.jp/~MAS/perl/waza/mailat …
かと思われますが。

リファレンスは…
http://search.cpan.org/~yves/MIME-Lite-3.01/lib/ …
かな。

リファレンス違反ということですからサンプルコード書いているページに苦情を上げるべきでしょうか?


というか、貴方の解釈が間違っている。
という可能性の方が高いと思われるのですが、その辺りはどうお考えで?
    • good
    • 0
この回答へのお礼

有難う御座います。
一応、動いたには動いたのですが。

Pathはここでは実際に添付するファイル名の様です。
それで、Filenameも添付するファイル名と想定をして送ったのですがこ
のファイルは送信をされていません。

それで、Pathのみを指定してFilenameを外して送信した所これのみの指
定でも正常に送信が出来ました。

一応、送れたのは送れたのですが。益々分からなくなりました。
このFilenameと言うのは何なのでしょうか。

ここでは、Pathと言うのはディレクトリーでは無い様です。
そして、このFilenameと言うのもファイル名では無い様です。

この辺の言葉尻が分かりません。最後はここだけが分かりませんので宜
しければ回答を願います。

宜しくお願いします。

お礼日時:2015/12/03 16:11

Filename の意味は, #5 に挙がっている


http://search.cpan.org/~yves/MIME-Lite-3.01/lib/ …

http://www2u.biglobe.ne.jp/~MAS/perl/waza/mailat …
に書いてあります. RTFM.
この回答への補足あり
    • good
    • 0
この回答へのお礼

分からんから聞いている。
頼みます
Filenameとは何ですか

お礼日時:2015/12/03 18:06

ファイル名というのは「ファイルの名前」です。


中身と関係のある名前を付けるのが慣例ですが、実際のところ、名前と中身は関係ありません。

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コマンドの実行結果で「ファイル」ではない



なんかおかしい、と思ったら、公式の(できないのなら、できるかぎり公式に近い)マニュアルを読みましょう。
    • good
    • 0
この回答へのお礼

有難う御座います。

最初は、Pathと言うのはディレクトリーと思っていましたが。例示で
は、実際に送るファイル名と書かれている。然し、Pathは通常ディレク
トリーの筈だと思いそのままディレクトリーを指定して、Filenameに実際
のファイル名を指定しました。

然し、これを動かすとパーミッションのエラーが出ます。そこで、嵌り
ました。然し、例文の殆どがPathに実際のファイル名が指定をされてい
るので、それに従い実際のファイル名を指定をすると動きました。

然し、その時に今度はFilenmaeで指定をした実際に送るファイル名は何
の影響も有りません。それで、ではこの場合のFilenmaeとは何だったの
かと言う疑問に当たりました。

Filenameの語句がPseudo_Filenameと書かれていれば理解を出来たので
すが。また、ここでは輪を掛けてのPathと言うのが有りますので。二重
に嵌ってしまいました。

英文のマニュアルを理解をすれば良いのでしょうが。中々に私のスキル
不足で時間が取れなくてすみませんでした。

私を馬鹿にして下さった方と言うのは、このような説明を今後やって貰
いたいと思います。きちんと質問者に分かる回答をして馬鹿にするのは
結構ですが。

若しも、説明が出来ないのであれば。質問者の方は貴方も実は分かって
無いのですよね。と思いますよ。類は類を呼ぶと言いますので余り過激
な回答は御遠慮願います。

お礼日時:2015/12/04 07:49

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