我正准备为网站创建一个表单页面,该页面需要许多字段供用户填写,并将发送到指定的电子邮件。
到目前为止,我已经创建了一个虚拟的php电子邮件页面,可以使用Google的SMTP获取您的邮件,附件和收件人电子邮件地址。
这是我的uploadtest.html代码:
<body>
<h1>Test Upload</h1>
<form action="email.php" method="get">
Message: <input type="text" name="message">
Email: <input type="text" name="email"><br>
Attach File: <input type="file" name="file" id="file">
<input type="submit">
</form>
</body>
uploadtest.html是用户将看到的内容
这是email.php的代码:
<?php
require("class.phpmailer.php");
$mail = new PHPMailer();
$recipiant = $_GET["email"];
$message = $_GET["message"];
$mail->IsSMTP(); // telling the class to use SMTP
$mail->SMTPAuth = true; // SMTP authentication
$mail->Host = "smtp.gmail.com"; // SMTP server
$mail->Port = 465; // SMTP Port
$mail->SMTPSecure = 'ssl';
$mail->Username = "xxxxx@gmail.com"; // SMTP account username
$mail->Password = "xxxxxxxx"; // SMTP account password
$mail->AddAttachment($_FILES['tmp_name']); //****HERE'S MY MAIN PROBLEM!!!
$mail->SetFrom('cinicraftmatt@gmail.com', 'CiniCraft.com'); // FROM
$mail->AddReplyTo('cinicraftmatt@gmail.com', 'Dom'); // Reply TO
$mail->AddAddress($recipiant, 'Dominik Andrzejczuk'); // recipient email
$mail->Subject = "First SMTP Message"; // email subject
$mail->Body = $message;
if(!$mail->Send()) {
echo 'Message was not sent.';
echo 'Mailer error: ' . $mail->ErrorInfo;
} else {
echo 'Message has been sent.';
}
?>
从我在这里可以看出,PHPMailer的AddAttachment()方法将您想要附加的文件DIRECTORY的URL作为参数。这就是我的主要问题所在。
变量的名称是什么才能获得我上传的文件(dir / upload.jpg)的位置,以便我可以将它用作AddAttachment()方法中的参数?
答案 0 :(得分:4)
不,它不需要URL或目录。它需要直接路径到文件。
e.g。
$mailer->AddAttachment(
'/path/to/file/on/your/server.txt',
'name_of_file_in_email',
'base64',
'mime/type'
);
路径不言自明。 name_of_file_in_email
允许您“重命名”该文件,以便您可以在服务器上加载名为“foo.exe”的文件,它可以在客户端收到的电子邮件中显示为“bar.jpg”。
您的问题是您尝试附加上传的文件,但使用了错误的来源。它应该是
<input type="file" name="thefile" />
^^^^^^^
$_FILES['thefile']['tmp_name']
^^^^^^^
注意$ _FILES的字段名称关系。
答案 1 :(得分:1)
您的<form>
代码应指定enctype
属性,如下所示:
<form ... enctype="multipart/form-data">
...
</form>
答案 2 :(得分:1)
这将通过PHPMailer Class
发送$mail->AddAttachment($_FILES['tmp_name'],$_FILES['name']); //****HERE'S MY MAIN PROBLEM!!! So you would have to give file name also.
请尝试使用此
include "phpMailerClass.php";
$email = new PHPMailer();
$email->From = $to;
$email->FromName = $_POST['name'];
$email->Subject = $subject;
$email->Body = $EmailText;
$email->AddAddress( 'shafiq2626@hotmail.com' );
$email->IsHTML(true);
$file_to_attach = $_FILES['file']['tmp_name'];
$filename=$_FILES['file']['name'];
$email->AddAttachment( $file_to_attach , $filename );
$email->Send();
这是代码工作正常。