PHPMailerで,ファイルを手元に保存せずに文字列だけからファイル添付する

いつかレコメンさんにメール送ってみたさある…🤦🏻‍♀️あの丸にレのファイル魅力的🤦🏻‍♀️
「先程のメールの添付ファイルのパスワードはこの経路のExtended Communityをデコードしてください」
「董卓を討つ方法」っていうタイトルの迷惑メールが来たら、有無を言わさず添付ファイルを開くね。exeでも
いま自殺を考えている君へ。君はおそらく死ぬ前にPCや携帯内のデータを整理するだろうが、警察は、自殺の経緯を調べるため2ヶ月かけてそれを復元する。繰り返す、消したファイルやメールは全て復元される。死ぬのはもう少し考えてからでも遅くない。
Beatsに送るメールの添付ファイルはWordが原則
最近リンクもファイルも添付されてないメールいっぱいくるんだけどなんで
海外や外国人と争いする場合は証拠が何よりも重要。海外との仕事はすべてEメールで資料は添付、送信メールも返信も保存。クラウドフォルダの共有やファイル便だと立証に手間がかかるし、相手側による証拠隠滅のリスクも高まります。独立記念日に何を学んでいるんだか、、。
会社から貸与のiPad miniが意外なほど便利だ。添付ファイルを編集する必要がなければメールなどもこれでなんとかなる。持ち帰らなくていい時はPCは会社に置いておくことができるようになった。
御社にファイル添付します!ってメール送ったのに添付出来てなかった、恥ずかしい…
今年10月の民俗学会の年会、メール添付した発表要旨が受領されたので発表できそう。でも、第2回サーキュラーに要旨と登録票のデータをメール添付と書いてあった一方、年会公式サイトからダウンロードしたファイルには、書きこんだ用紙を郵送せよ、とあった。これミスでしょ? #日本民俗学会年会
最近、迷惑メールに添付されているファイルを開いてみたい欲に駆られるけどさすがにやらない。
一次合格通知のメールのコピーが入ったファイル忘れてめっちゃ焦ったけど印刷できてよかった😭😭😭始まる前に気づいてよかったぁ……
読み取り専用ファイルにしようとしたもののやり方を調べるのもめんどくさく結局自分にメール送る無能おじさん
powershellとews apiでexchangeからメールを拾って添付ファイルを取り出す試み
基本的にWebMoney支払いとなります。購入した際は、[説明ファイル(txt)とuwsファイル(uws)]をメールに添付し、送信します。
あせって、他のメールにもファイル添付しないでメール送ってしまった😭😭😭 本気でやばいやつや… 次出すのには細心の注意を払います……。
ありえんことに、新PCもだめだ。サブもしんでる。 いま、よれよれの旧PCだけが頼みの綱だけど、昨日信じて新PCに移行したメールファイルが…

PHPMailer

PHPMailer/PHPMailer: The classic email sending library for PHP

基本的な使い方はこちらをどうぞ。

注意

2016年12月に発覚したPHPMailerの脆弱性について↓
最新版を使うなど対策はご自身でm(_ _)m

addStringAttachment

できること・使い方

文字列を指定の形式のファイルとしてメールに添付する。

mail.php
<?php
require("PHPMailer/class.phpmailer.php");

$mailer = new PHPMailer();

// 前処理いろいろ。c.f. 上記参考リンク

$str  = '日付,メニュー,内容' . "n";
$str .= '170716,日替わり定食A,焼き鮭' . "n";
$str .= '170716,日替わり定食B,肉野菜炒め' . "n";

$filename = '170716食堂通信.csv';

$mailer->addStringAttachment($str, $filename);

$mailer->send();

これでこういう感じのCSVファイル( 170716食堂通信.csv )が添付されます↓
サーバー側にファイルは残りません。

日付 メニュー 内容
170716 日替わり定食A 焼き魚
170716 日替わり定食B 肉野菜炒め

ファイルの形式は自分で別途指定もできますが,ファイル名の拡張子から勝手に判断してもらえるようです。
(ソースコード参照↓)

ソースコード

一部抜粋で

PHPMailer/class.phpmailer.php at master · PHPMailer/PHPMailer

PHPMailer/class.phpmailer.php
    /**
     * Add a string or binary attachment (non-filesystem).
     * This method can be used to attach ascii or binary data,
     * such as a BLOB record from a database.
     * @param string $string String attachment data.
     * @param string $filename Name of the attachment.
     * @param string $encoding File encoding (see $Encoding).
     * @param string $type File extension (MIME) type.
     * @param string $disposition Disposition to use
     * @return void
     */
    public function addStringAttachment(
        $string,
        $filename,
        $encoding = 'base64',
        $type = '',
        $disposition = 'attachment'
    ) {
        // If a MIME type is not specified, try to work it out from the file name
        if ($type == '') {
            $type = self::filenameToType($filename);
        }
        // Append to $attachment array
        $this->attachment[] = array(
            0 => $string,
            1 => $filename,
            2 => basename($filename),
            3 => $encoding,
            4 => $type,
            5 => true, // isStringAttachment
            6 => $disposition,
            7 => 0
        );
    }

シチュエーション

私がこれを使ったのは

  • DBから取得した情報をCSVファイルとして他部署の人にメールで送りたい
  • メール送信後,CSVファイルは別に使わない

↑という状況でした。
最初はこういう流れを考えていましたが↓

  1. DBから取得
  2. CSVファイルに取得結果を書き込み
  3. CSVファイル保存
  4. addAttachment($filepath)で添付・送信
  5. CSVファイル削除

わざわざこちらでCSVファイルを作ったり消したりしなくてもよかった,というお話でした。

「そもそもメールの添付ファイルってメーラーによって文字列に変換されて送信されるんだから,
ファイル作って添付ってステップ踏むと
文字列 → ファイル → メーラーがファイルを文字列に → 受取側が文字列をファイルに
ってしてるわけで最初のほう二度手間じゃん」と
先輩から指摘を受けてこちらを使ったという次第でした。たしかになー。

  • コメント

    1. 匿名希望
      2017/08/18(金) 01:10:53

      海外や外国人と争いする場合は証拠が何よりも重要。海外との仕事はすべてEメールで資料は添付、送信メールも返信も保存。クラウドフォルダの共有やファイル便だと立証に手間がかかるし、相手側による証拠隠滅のリスクも高まります。独立記念日に何を学んでいるんだか、、。

    2. 匿名希望
      2017/08/18(金) 01:10:53

      最近リンクもファイルも添付されてないメールいっぱいくるんだけどなんで

    3. 匿名希望
      2017/08/18(金) 01:10:53

      Beatsに送るメールの添付ファイルはWordが原則

    4. 匿名希望
      2017/08/18(金) 01:10:53

      いま自殺を考えている君へ。君はおそらく死ぬ前にPCや携帯内のデータを整理するだろうが、警察は、自殺の経緯を調べるため2ヶ月かけてそれを復元する。繰り返す、消したファイルやメールは全て復元される。死ぬのはもう少し考えてからでも遅くない。

    5. 匿名希望
      2017/08/18(金) 01:10:53

      「董卓を討つ方法」っていうタイトルの迷惑メールが来たら、有無を言わさず添付ファイルを開くね。exeでも

    記事に戻る

関連記事