这里一直是我学到很多东西的地方。我现在有了新的东西需要学习:
我有一个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('emai@emai.com' => 'name'))
->setBody($html, 'text/html')
;
// Add alternative parts with addPart()
$message->addPart(strip_tags($html), 'text/plain');
// Send the message
$result = $mailer->send($message);
有人可以帮助我如何进行即时文件上传吗?在此先感谢!!!
答案 0 :(得分:35)
有一种简单的方法可以做到这一点,在这里:
$message->attach(
Swift_Attachment::fromPath('/path/to/image.jpg')->setFilename('myfilename.jpg')
);
这是SwiftMail可以这样做的一种方式,现在只是/ 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,这个页面是可靠的。
答案 1 :(得分:3)
另一种方法是,只使用一个变量作为路径和文件名:
$message->attach(Swift_Attachment::fromPath('full-path-with-attachment-name'));
答案 2 :(得分:0)
单个附件
我的回答与安德烈·卡蒂塔(AndréCatita)的相似。但是,在Laravel 6中,您可以使用 $ request 代替 $ _ FILES 。让我简化上面的代码:
$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)
);
}