携帯電話などにメールの添付を外して転送する方法


会社の人からの依頼。

現在、会社に来たメールを自分の携帯電話(ドコモ)に転送しているが、
添付付きのファイルだと携帯キャリアのメールサーバーからエラーメッセージが送られてしまう
なし崩し的にお客様へエラーメールが届いてしまう
お客様から「ちゃんと届いてるの?」と言われることが多いので何とかしてくれ。

てな事が。


ちょっと調べると、解決方法としては
常時起動のPCに、添付を外して転送する機能のあるソフト入れておくのが主流らしいけど
そんな都合の良いPCないしなあ・・まさか自宅サーバでって訳にもいかないし。


と、言うわけで、一番安い(と思われる)さくらのレンタルサーバライトプラン(月額換算125円)でやる方法を調べた

  • 会社のメールアドレス → さくらへ転送設定 → 添付外し処理 → 携帯へ転送

な方法で。
参考:さくらのレンタルサーバ非公式FAQなどなど


以下手順メモ。

1)さくらのレンタルサーバ ライトの契約

こちらで。
http://www.sakura.ne.jp/rentalserver/lite/index.html
動作確認だけならお試し無料期間でもOK
新規にメールアカウントを作成する。

2).mailfilterの作成

/home/(ユーザー名)/MailBox/(作ったメールアカウント) に「.mailfilter」という名前のファイル作成
パーミッションは600
内容

to "| ../../prog/info_mail.pl (転送先携帯アドレス)"

3)転送perlプログラムを用意

/home/(ユーザー名)/prog フォルダを作る。パーミッションは755。
「info_mail.pl」という名前のファイル作成。パーミッションは700。
文字コードEUC、LF改行。
内容

#!/usr/bin/perl
use MIME::Parser;

$sendmail = '/usr/sbin/sendmail'; #sendmail位置
$fwd_address = 'ほにゃ@ほにゃ.ne.jp'; #転送先アドレス

my $parser = new MIME::Parser;
$parser->output_to_core(1);
my $entity = $parser->parse(\*STDIN);

# ヘッダ読み出し
my $from = $entity->head->get('From');
my $subject = $entity->head->get('Subject');
chomp $from;
chomp $subject;

#添附チェック
my $body;
if (not $entity->is_multipart) {
	$body = $entity->bodyhandle->as_string ."\n"; #添附無い場合
} else {
    $body = $entity->parts(0)->bodyhandle->as_string."\n";#添付ある場合
}

# 送信
open(OUT,"| $sendmail -t -i");
print OUT "From: " . $from . "\n";
print OUT "To: " . $fwd_address . "\n";
print OUT "Subject: " . $subject . "\n";
print OUT "Content-Transfer-Encoding: 7bit\n";
print OUT "Content-Type: text/plain; charset=\"iso-2022-jp\"\n\n";
print OUT $body . "\n";
close(OUT);

(さくらアカウントへ)添付有りテストメールを送ってみて
携帯へ添付無しで届くか確認

4)転送先の変更

現在のメール転送先を、携帯からさくらのアカウントへ変更。
(プロバイダのアカウントへ)添付有りテストメールを送ってみて
携帯へ添付無しで届くか確認


・・こんな感じでどうでしょう?
本当なら「添付ファイル〜があります」とか追記して送ればいいのだけど、
例によって文字コードの扱いが面倒なので省略。