2016-06-17 7 views
3

私は、ユーザーがボタンをクリックしてPDFレポートをダウンロードできるWebアプリケーションを持っています。ファイルをダウンロードしてすぐに電子メールの添付ファイルとしてエクスポートする方法

ユーザーがPDFをダウンロードするとすぐに電子メールの添付ファイルとして開くように要求しました(mailtoアンカーをクリックしたときのようなもの)。

これも可能ですか?私はたぶんjsを使って背後のアンカータグを生成することを考えていましたが、mailtoは本当に添付ファイルをサポートしていません。

この場合、PDFは出力モードをダウンロードするように設定されたPHP mPDFを使用してサーバー側で生成されます。

+0

役立つサンプルコードです。 – Farkie

+0

クライアント側のネイティブアプリケーションがなくても意味はありますか? –

+0

あなたのウェブサイトでダウンロードしたPDFを聞いて、それをパスしていると思います。それでも、それは非常に難しいでしょう。 – Farkie

答えて

0

mailtoファイルがローカルで利用可能な場合、添付ファイルをサポートします。 attachパラメータを使用して指定することができます。
mailto:[email protected]?subject=Test&attach=C:\Documents%20and%20Settings\username\Desktop\foldername\file.extn
しかし、ユーザーが自分のマシン上の任意の場所にファイルをダウンロードできるように、コード内でどのようにこのコードを使用するかはわかりません。任意の用途の場合、attachパラメータは、ユーザーに適切なアクセス権がある場合、共有ドライブの場所をサポートします。

+0

セキュリティの問題のため、最近の 'attach'パラメータは無視されています – Farkie

0

このためには、2つのステップでプロセスを分ける必要があります。

  1. http://wkhtmltopdf.org/
  2. 送信を使用して、いくつかのディレクトリにサーバー上のPDFを生成しますがhttps://github.com/PHPMailer/PHPMailer

を使用して電子メールの添付ファイルの一部としてPDFを生成し、両方のサービスの設定は、あなたのタスクを達成するのに役立ちます。以下は

それは、少なくとも任意のクライアントせずにクライアントコンピュータ上で実行、ことはできませんあなた

//generate PDF file for bill and send it in email 
public function sendInvoiceInEmail($register_no, $html_string, $guest_email_id) 
{ 
    //create mailer class 
    $mail = new PHPMailer; 
    //remove old invoice file if exist at public/doc 
    // here i have used my path you have to use your path 
    if(file_exists(__DIR__.'/../../public/docs/invoice.pdf')){ 
     unlink(__DIR__.'/../../public/docs/invoice.pdf'); 
    } 

    // You can pass a filename, a HTML string, an URL or an options array to the constructor 
    $pdf = new Pdf([ 
     'commandOptions' => [ 
      'useExec' => false, 
      'escapeArgs' => false, 
      'procOptions' => array(
      // This will bypass the cmd.exe which seems to be recommended on Windows 
      'bypass_shell' => true, 
      // Also worth a try if you get unexplainable errors 
      'suppress_errors' => true, 
      ), 
     ], 
    ]); 
    $globalOptions = array(
     'no-outline' 
    ); 

    $pdf->setOptions($globalOptions); 

    $pdf->addPage($html_string); 
    //for Windows in my system i have setup wkhtmltopdf here 
    $pdf->binary = '"C:/Program Files/wkhtmltopdf/bin/wkhtmltopdf.exe"'; 
    // for linux when you will host you have to setp on linux abd comment windows path and uncomment below line 
    //$pdf->binary = '/home/username/wkhtmltox/bin/wkhtmltopdf'; 
    if (!$pdf->saveAs(__DIR__.'/../../public/docs/invoice.pdf')) { 
     throw new Exception('Could not create PDF: '.$pdf->getError()); 
    } 
    //now send email and attach invoice.pdf file from public/doc/invoice.pdf 



    //$mail->SMTPDebug = 3;        // Enable verbose debug output 
    $mail->isSMTP();          // Set mailer to use SMTP 
    $mail->Host = 'hostname'; // Specify main and backup SMTP servers 
    $mail->SMTPAuth = true;        // Enable SMTP authentication 
    $mail->Username = 'username';     // SMTP username 
    $mail->Password = 'password';       // SMTP password 
    $mail->SMTPSecure = 'tls';       // Enable TLS encryption, `ssl` also accepted 
    $mail->Port = 587;         // TCP port to connect to 
    $mail->setFrom('from_email_address', 'From Name',FALSE); 
    $mail->addAddress('to_email_address');  // Add a recipient 

    $mail->addAttachment(__DIR__.'/../../public/docs/invoice.pdf');   // Add attachments 

    $mail->isHTML(true);         // Set email format to HTML 

    $mail->Subject = 'Subject'; 
    $mail->Body = 'email message body'; 

    $is_email_sent = false; 
    if(!$mail->send()) { 
     // echo 'Message could not be sent.'; 
     // echo 'Mailer Error: ' . $mail->ErrorInfo; 
     $is_email_sent = false; 
    } else { 
     // echo 'Message has been sent'; 
     $is_email_sent = true; 
    } 

    return true; 
} 
+0

これは質問のためのものではありません - mailto:はクライアントサイドの電子メールリンクですので、例えばthunderbirdです。 – Farkie

+0

私はサーバーから送信する方が良いと思う数日前に私はクライアント側を使って試してみましたが失敗しました –

+0

しかし、私はサーバー側のアプローチとポストされたソリューションを使用して成功します。私はそれが助けるかもしれないと思う –

関連する問題