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

プロ学生はメール提出のレポートが間に合わない場合、予め用意しておいた文字化けファイルを送りつけて、「文字化けしていますよ、もう一度送ってください」と言って貰い時間を稼ぐらしい。
【嫌われるメール】 <内容編> 1.調べれば簡単に分かることを質問してくる 2.段取りが悪い 3.ファイルの添付を忘れる OB訪問のメールでは、日程や時間・場所にいたるまで、ある程度先に候補を提示すべきです。目安でいうと、「1往復半」で終わると効率的です。
アラアラのセーブデータってSDカードから抜いて添付ファイルでメール送信とかできるのかな・・・? #アラアラ #アラアラお茶会2017
プロ学生はメール提出のレポートが間に合わない場合、予め用意しておいた文字化けファイルを送りつけて、「文字化けしていますよ、もう一度送ってください」と言って貰い時間を稼ぐらしい。
【気をつけるポイント!!】 ・ESを送る際は、クリアファイルに入れて封筒に入れる。 ・面接が終わったあとに、お礼のメールを送る。 些細なことですが、見てる人は見てます。 細かいところにも気配りができる人は どこにいっても好かれる。です!
メールの添付ファイルミスった…
【帝國人民の心得】外国からのメールなど知らない差出人からのメールにファイルが添付されていたら,コンピュータウィルスの場合がありますので、そのファイルは開かないようにしましょう。
公開されてるAPIがメール形式でしかもパラメータは添付ファイルという仕様でクソだ!ってキレてる夢だった。どんなAPIだよって感じですが。
恐い恐い~ ハイデル ウイルスって恐くない? まぁさ~このQメールサービスはファイルを添付出来ないから安心だけどな~ 気を付けた方がいいぜ~
基本的にWebMoney支払いとなります。購入した際は、[説明ファイル(txt)とuwsファイル(uws)]をメールに添付し、送信します。
ナントカ:今日ロックからの報告書がメールで届いたんだが、メールの文章が滅茶苦茶礼儀正しかったが、その添付ファイル名が「意味のわからないめんどいやつ.docx」……こいつ、将来大物になるぞ……。
プロ学生はメール提出のレポートが間に合わない場合、予め用意しておいた文字化けファイルを送りつけて、「文字化けしていますよ、もう一度送ってください」と言って貰い時間を稼ぐらしい。
添付ファイル付きメール全部迷惑メールフォルダにいってたとかそれ実際に迷惑被ってるの絶対私だけじゃないじゃん……意味不明オブザイヤーなんですけど……
登録した覚えのないメールは開かずにゴミ箱へ捨てるか、「受信拒否」などの設定をしておいた方がいいでしょう。特にファイルの添付されているものはウィルスの可能性が高いので絶対に開いてはいけません。
ファイル圧縮に時間かかりすぎて昨日中提出メール送れなかった(´;ω;`)
【ぷらり、ね。|台本に関して】 頂いたメールでファイルが閲覧が出来た方と出来なかった方で分かれているようです。 もし開けなかった方はお手数ですが、使用OS(Win/Mac)と開けなかった形式(txt/pdf)をご連絡頂けますと幸いです。此方の不手際で申し訳ございません。
メールの添付ファイルからランサムウェアやら情報漏洩やら散々やらかしといて、「クラウドストレージはセキュリティが」とか言って使わせないの、控えめに言ってバカ
機械音痴って困るね 先生に何度も指摘されてるのに正しい添付ファイルでメール送れないんだもん。。

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/07/18(火) 07:16:03

      プロ学生はメール提出のレポートが間に合わない場合、予め用意しておいた文字化けファイルを送りつけて、「文字化けしていますよ、もう一度送ってください」と言って貰い時間を稼ぐらしい。

    2. 匿名希望
      2017/07/18(火) 07:16:03

      アラアラのセーブデータってSDカードから抜いて添付ファイルでメール送信とかできるのかな・・・?

      #アラアラ
      #アラアラお茶会2017

    3. 匿名希望
      2017/07/18(火) 07:16:03

      【嫌われるメール】
      <内容編>
      1.調べれば簡単に分かることを質問してくる
      2.段取りが悪い
      3.ファイルの添付を忘れる

      OB訪問のメールでは、日程や時間・場所にいたるまで、ある程度先に候補を提示すべきです。目安でいうと、「1往復半」で終わると効率的です。

    4. 匿名希望
      2017/07/18(火) 07:16:03

      プロ学生はメール提出のレポートが間に合わない場合、予め用意しておいた文字化けファイルを送りつけて、「文字化けしていますよ、もう一度送ってください」と言って貰い時間を稼ぐらしい。

    5. 匿名希望
      2017/07/18(火) 07:16:03

      基本的にWebMoney支払いとなります。購入した際は、[説明ファイル(txt)とuwsファイル(uws)]をメールに添付し、送信します。

    記事に戻る

関連記事