perl初心者なのですが質問いたします。
自分のレンタルサーバーのメールアドレスに携帯から
写メールを送信してそのメールを MIME::Parser;を使って
画像と本文を取り出しpost送信してを自分のHPに出力で
きるのではと思いスクリプトを書いてるのですが
MIME::Parserの取ってきたデーターが素直に送れない
様なので悩んでおります。
流れ的にはNet::POP3で
my $messages = $pop3->list();
foreach $id (sort (keys %{$messages})) {
my $message = $pop3->get($id);
.......
と$messageでメールを任意のディレクトリに保存して
MIME::Parser;で$messageを解析してます。
#本文の取得
my $entity = $parser->parse_data($message);
my $subject = $entity->head->get('Subject');
my $body_entity = ($entity->is_multipart) ? $entity->parts(0) : $entity;
my $body = $body_entity->bodyhandle;
my $bodylast = $body->as_string;
#添付ファイルの処理
my $uploadFile = $entity->parts(1)->bodyhandle->as_string;
# リクエストの生成
my $url = 'http://xxx.cgi';
my %formdata = ('perl' => 'rakuda', 'comment'=>"$bodylast",'upfile'=>"$uploadFile");
my $request = POST($url, [%formdata]);
# UserAgentを生成して処理
my $ua = LWP::UserAgent->new;
my $res = $ua->request($request);
print $res->as_string;
$pop3->delete($id);
$pop3->quit;
一応送られてはいる様なのですが
commentの部分は文字化けしてます、大元のレンタルサーバのソース
をしらべると
Content-Type: text/plain; charset="iso-2022-jp"
Content-Transfer-Encoding: 7bit
というエンコードがされてるようです。
そしてupfileの部分はxxx.cgiのチェック部分の
foreach (@in) {
if (/(.*)Content-type:(.*)/i) { $content=$2; }
if (/(.*)filename=\"(.*)\"/i) { $fname=$2; }
.....
の部分でクリア出来ないようで設定したエラーがでてしまいます。
(因みにxxx.cgiはfirefoxやIEからは問題なくpostできます)
レンタルサーバーの添付画像の部分のソースは
Content-Type: image/jpeg; name="091108_1053~0001.jpg"
Content-Transfer-Encoding: base64
Content-Disposition: attachment; filename="091108_1053~0001.jpg"
となっておりbase64エンコードのようです。
調べてMIME::Base64;もレンタルサーバーにインストールされてたので
my $uploadFile = encode_base64($uploadFile);
ともしてpostしてみたのですが上のチェック部分のエラーが出てしまいます。
長くなってしまいましたが、MIME::Parserで取り出したcomment部分と
upfile部分をどうにか正常に出力されるように送りたいのですが自分で
はもう底です。
もしかしたら無駄に遠回りしてるかも知れませんが御教示していただけたら
ありがたいです。
A 回答 (1件)
- 最新から表示
- 回答順に表示
No.1
- 回答日時:
文字化けは
use Encode;
my $bodylast = decode( 'ISO_2022_JP', $body->as_string);
とかかなぁ
my %formdata = ('perl' => 'rakuda', 'comment'=>"$bodylast",'upfile'=>"$uploadFile");
の$uploadFile は、ディスク上のファイルでないとだめかも?
ファイルは、CGIのローカルに一旦保存できるなら
my $pop_dir = './pop';
$parser->output_to_core(0);
if ( !-d $pop_dir ) {
mkdir $pop_dir or die "mkdir $pop_dir:$!";
}
$parser->output_dir($pop_dir) or die "$pop_dir:$!";
で./popにファイルができると思う。
直接デコードして送る方法はわかりません。
_--_1l1_1_さん遅くなりましたが回答有難うございました。
回答はすぐ目を通したのですが、なかなか解決しないもので
返事がおくれてしまいました。
本文の文字化けは
use Encode;
my $bodylast = decode( 'ISO_2022_JP', $body->as_string);
で解決できました。
>ファイルは、CGIのローカルに一旦保存できるなら
これはcgiのあるディレクトリに保存という事でよろしいのでしょうか。
質問をした後に気がついたのですがNet::POP3で任意のディレクトりに
.emlを保存した以外にカレントにjpgファイルが保存されていました。
仕様なのですかね、コレでなんとかと思いアレコレしたのですが、まと
めてpost送信はうまくいきませんでした。
邪道というか妥協案ですがxxx.cgiでhtmlの<img src.......
からjpgファイルを呼び出す処理をしました。
見た目は望んだ出来に近いのですがやってる事の中身は
エレガントではありませんね(笑)
まだ術はあるんでしょうけど。
有難うございました。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- CGI perlで書いたcgiでsqliteの使い方を教えてください 2 2023/05/08 21:29
- CGI htmlからパラメータで、cgiに渡したい。 1 2023/02/06 16:15
- PHP PHPでCookieを使った訪問回数について 1 2023/05/28 14:10
- PHP imageフォルダに、画像をリサイズして保存する時のファイル名を変更したい 1 2023/05/30 11:39
- JavaScript jQueryでのドラッグアンドドロップについて 1 2022/07/07 21:04
- PHP 入力した部分を表示させたまま(保持)するにはどうすれば良いでしょうか? 1 2023/01/25 11:14
- その他(クラウドサービス・オンラインストレージ) Google ColabでGoogleドライブのサブフォルダにファイルを生成する方法 1 2022/10/31 17:37
- AJAX JavascriptからPHPへのAjax通信でnullが返ってくる 3 2022/08/03 22:00
- PHP PHPのエラーの解消法について教えて下さい。 1 2023/02/06 10:48
- JavaScript 入力フォームの javascript で メールアドレスの正規チェックをを行い、ボタンをクリックして 2 2022/04/27 16:06
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
batファイルでrenameができませ...
-
vba dir の相対パス
-
dos変数の%~dp0は powershellで...
-
Perlスクリプトでフォルダを開...
-
readdir()で得られるファイル・...
-
複数ファイルの読み込みについて
-
chdirがうまくできない
-
Windowsで複数のファイルを同じ...
-
VBAでCSVファイルを途中行まで...
-
バッチファイルの作り方(CSV→...
-
close()で例外が投げられる理由
-
VBAでCSVファイルの特定行を書...
-
openした後、closeしないでプロ...
-
VBAコードを張り付け後のエクセ...
-
ListBoxのデータを高速でファイ...
-
JavaでCSVファイルを高速に読む...
-
至急お願いします。C言語で.img...
-
タブの色を変更する方法
-
while(<ハンドラ>) {} で行数を...
-
RSS自動生成で文字化け
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
batファイルでrenameができませ...
-
FindFirstFileとFindNextFileで...
-
ディレクトリの判別
-
Windowsで複数のファイルを同じ...
-
vba dir の相対パス
-
パスから最後のディレクトリだ...
-
chdirがうまくできない
-
テキストファイルの結合
-
dos変数の%~dp0は powershellで...
-
Perlで フォルダ内の全て...
-
readdir()で得られるファイル・...
-
makefileでファイルをコピー(...
-
C言語でファイル名を取得
-
サーバーにある特定の拡張子フ...
-
ディレクトリツリーの表示
-
ファイル名と更新日付の取得に...
-
Director拡張子
-
LinuxのC言語で、ファイル名の...
-
複数ファイルの読み込みについて
-
ディレクトリ名を取得したい
おすすめ情報