web-dev-qa-db-ja.com

添付ファイル付きのswiftmailerとメールフォーム-初心者

いつものように、ここは私がたくさん学んだ場所です。そして、私は今、学ぶべき新しいことを持っています:

私はhtmlフォームを持っています:

<tr><td width="16%">File attachment</td><td width="2%">:</td><td><input type="file" name="fileatt" /></td></tr>

およびmail.php:

$attachfile=$_POST["fileatt"];

電子メールを送信するための正しいswiftmailerコード。

私はグーグルで検索し、ウェブサイトに保存されているファイルで添付ファイルを送信する方法の例をたくさん見つけましたが、その場でやりたいと思います。したがって、ボタンを送信すると、ファイルをアップロードするのではなく、人々に送信されます。

// Create the Transport
$transport = Swift_SmtpTransport::newInstance('mail.server.co.uk', 25)
->setUsername('user')
->setPassword('pass')
;

// Create the Mailer using your created Transport
$mailer = Swift_Mailer::newInstance($transport);

// Create a message
$message = Swift_Message::newInstance($subject)
  ->setFrom(array('[email protected]' => 'name'))

   ->setBody($html, 'text/html')
  ;
// Add alternative parts with addPart()
$message->addPart(strip_tags($html), 'text/plain');

// Send the message
$result = $mailer->send($message);

誰かがその場でファイルをアップロードする方法を教えてもらえますか?前もって感謝します!!!

14
TryHarder

これを行う簡単な方法があります、ここに行きます:

$message->attach(
Swift_Attachment::fromPath('/path/to/image.jpg')->setFilename('myfilename.jpg')
);

これは、SwiftMailがこれを実行できる1つの方法であり、現在は/ tmpファイルのみであり、上記を次のように変換します。

Fileattが$ _FILEの変数であると仮定すると、['tmp_name']は実際にはPHPがフォームのアップロードから作成するtmpファイルです。

$message->attach(
Swift_Attachment::fromPath($_FILES['fileatt']['tmp_name'])->setFilename($_FILES['fileatt']['name'])
);

SwiftMailの添付ファイルの詳細については、この docs ページを参照してください。

$ _FILESの詳細については、w3schoolsを参照してください。私は好きではありませんが、 w3schools ですが、このページはしっかりしています。

37
André Catita

パスとファイル名に単一の変数のみを使用してこれを行う別の方法は次のとおりです。

$message->attach(Swift_Attachment::fromPath('full-path-with-attachment-name'));
3
Aris

シングルアタッチメント

私の答えはアンドレ・カティータの答えと似ています。ただし、Laravel 6では、$ _ FILESの代わりに$ requestを使用できます。上記のコードを簡略化してみましょう。

$path = $request->file('import')->getPathName();
$fileName = $request->file('import')->getClientOriginalName();      

$message->attach(
        Swift_Attachment::fromPath($path)->setFilename($fileName)
        );

ここでは、ファイルタグの名前がimportであると想定しています。例:<input type="file" name="import" />

複数の添付ファイル

ここで、単一の添付ファイルの代わりに複数の添付ファイルが必要だとします。次に、コードを変更する必要があります。

最初にあなたのhtmlコードは次のようになります:<input type="file" name="import[]" multiple />

そしてバックエンドやlaravelの場合;コードは次のようになります:

$files = $request->file('import');
foreach($files as $file){

        $path = $file->getPathName();
        $fileName = $file->getClientOriginalName();      

        $message->attach(
            Swift_Attachment::fromPath($path)->setFilename($fileName)
            );
}
0
Bimal