phpMailer 및 PHP를 사용하여 양식에서 첨부 파일 보내기
에 대한 양식을 가지고 있습니다.example.com/contact-us.php
다음과 같이 표시됩니다(증명).
<form method="post" action="process.php" enctype="multipart/form-data">
<input type="file" name="uploaded_file" id="uploaded_file" />
<input type="hidden" name="MAX_FILE_SIZE" value="10000000" />
</form>
인마이process.php
파일, 다음 코드를 사용하고 있습니다.PHPMailer()
이메일을 보내려면:
require("phpmailer.php");
$mail = new PHPMailer();
$mail->From = me@example.com;
$mail->FromName = My name;
$mail->AddAddress(me@example.com,"John Doe");
$mail->WordWrap = 50;
$mail->IsHTML(true);
$mail->Subject = "Contact Form Submitted";
$mail->Body = "This is the body of the message.";
이메일이 본문을 올바르게 전송하지만 첨부 파일 없이uploaded_file
.
질문입니다
파일이 필요합니다.uploaded_file
이메일로 첨부할 양식에서 전송한다.파일 저장에 관심이 없습니다.process.php
스크립트가 이메일로 보냅니다.
다음 사항을 추가해야 한다는 것을 알고 있습니다.AddAttachment();
어딘가에서 (내 추측으로는)Body
line)을 사용하여 첨부 파일을 전송합니다.그렇지만.....
- 맨 위에는 무엇을 넣어야 합니까?
process.php
파일을 끌어당길 파일uploaded_file
사용하는 것 같은 것$_FILES['uploaded_file']
contact-us.contact 페이지에서 파일을 가져올 수 있습니까? - 안에 들어가는 내용
AddAttachment();
파일을 첨부하여 이메일과 함께 보내려면 이 코드를 어디로 보내야 합니까?
도와주시고 코드를 제공해주세요!감사합니다!
시험:
if (isset($_FILES['uploaded_file'])
&& $_FILES['uploaded_file']['error'] == UPLOAD_ERR_OK
) {
$mail->addAttachment($_FILES['uploaded_file']['tmp_name'],
$_FILES['uploaded_file']['name']);
}
여기서 여러 파일 업로드 첨부 기본 예를 찾을 수 있습니다.
의 함수 정의addAttachment
다음과 같습니다.
/**
* Add an attachment from a path on the filesystem.
* Never use a user-supplied path to a file!
* Returns false if the file could not be found or read.
* Explicitly *does not* support passing URLs; PHPMailer is not an HTTP client.
* If you need to do that, fetch the resource yourself and pass it in via a local file or string.
*
* @param string $path Path to the attachment
* @param string $name Overrides the attachment name
* @param string $encoding File encoding (see $Encoding)
* @param string $type MIME type, e.g. `image/jpeg`; determined automatically from $path if not specified
* @param string $disposition Disposition to use
*
* @throws Exception
*
* @return bool
*/
public function addAttachment(
$path,
$name = '',
$encoding = self::ENCODING_BASE64,
$type = '',
$disposition = 'attachment'
)
클라이언트 PC에서 파일을 첨부할 수 없습니다(업로드).
HTML 양식에서 다음 행을 추가하지 않았기 때문에 첨부파일은 진행되지 않았습니다.
enctpe="formart/form-form-data"
위의 행(아래와 같이)을 추가하자 첨부파일이 완벽해졌습니다.
<form id="form1" name="form1" method="post" action="form_phpm_mailer.php" enctype="multipart/form-data">
이 코드는 첨부 파일 전송에 도움이 됩니다...
$mail->AddAttachment($_FILES['file']['tmp_name'], $_FILES['file']['name']);
Add Attachment(...) 코드를 위의 코드로 바꿉니다.
phpmailer의 html 형식을 사용하여 업로드 파일 옵션과 함께 첨부 파일을 보낼 때 이 코드를 사용합니다.
<form method="post" action="" enctype="multipart/form-data">
<input type="text" name="name" placeholder="Your Name *">
<input type="email" name="email" placeholder="Email *">
<textarea name="msg" placeholder="Your Message"></textarea>
<input type="hidden" name="MAX_FILE_SIZE" value="30000" />
<input type="file" name="userfile" />
<input name="contact" type="submit" value="Submit Enquiry" />
</form>
<?php
if(isset($_POST["contact"]))
{
/////File Upload
// In PHP versions earlier than 4.1.0, $HTTP_POST_FILES should be used instead
// of $_FILES.
$uploaddir = 'uploads/';
$uploadfile = $uploaddir . basename($_FILES['userfile']['name']);
echo '<pre>';
if (move_uploaded_file($_FILES['userfile']['tmp_name'], $uploadfile)) {
echo "File is valid, and was successfully uploaded.\n";
} else {
echo "Possible invalid file upload !\n";
}
echo 'Here is some more debugging info:';
print_r($_FILES);
print "</pre>";
////// Email
require_once("class.phpmailer.php");
require_once("class.smtp.php");
$mail_body = array($_POST['name'], $_POST['email'] , $_POST['msg']);
$new_body = "Name: " . $mail_body[0] . ", Email " . $mail_body[1] . " Description: " . $mail_body[2];
$d=strtotime("today");
$subj = 'New enquiry '. date("Y-m-d h:i:sa", $d);
$mail = new PHPMailer(); // create a new object
//$mail->IsSMTP(); // enable SMTP
$mail->SMTPDebug = 1; // debugging: 1 = errors and messages, 2 = messages only ,false = Disable
$mail->Host = "mail.yourhost.com";
$mail->Port = '465';
$mail->SMTPAuth = true; // enable
$mail->SMTPSecure = true;
$mail->IsHTML(true);
$mail->Username = "admin@domain.net"; //from@domainname.com
$mail->Password = "password";
$mail->SetFrom("admin@domain.net", "Your Website Name");
$mail->Subject = $subj;
$mail->Body = $new_body;
$mail->AddAttachment($uploadfile);
$mail->AltBody = 'Upload';
$mail->AddAddress("recipient@domain.com");
if(!$mail->Send())
{
echo "Mailer Error: " . $mail->ErrorInfo;
}
else
{
echo '<p> Success </p> ';
}
}
?>
이 링크는 참조용으로 사용합니다.
이것은 완벽하게 작동될 것이다.
<form method='post' enctype="multipart/form-data">
<input type='file' name='uploaded_file' id='uploaded_file' multiple='multiple' />
<input type='submit' name='upload'/>
</form>
<?php
if(isset($_POST['upload']))
{
if (isset($_FILES['uploaded_file']) && $_FILES['uploaded_file']['error'] == UPLOAD_ERR_OK)
{
if (array_key_exists('uploaded_file', $_FILES))
{
$mail->Subject = "My Subject";
$mail->Body = 'This is the body';
$uploadfile = tempnam(sys_get_temp_dir(), sha1($_FILES['uploaded_file']['name']));
if (move_uploaded_file($_FILES['uploaded_file']['tmp_name'], $uploadfile))
$mail->addAttachment($uploadfile,$_FILES['uploaded_file']['name']);
$mail->send();
echo 'Message has been sent';
}
else
echo "The file is not uploaded. please try again.";
}
else
echo "The file is not uploaded. please try again";
}
?>
사용할 수 있습니다.$_FILES['uploaded_file']['tmp_name']
PHP가 업로드한 파일을 저장한 경로입니다(다른 곳으로 이동/복사하지 않는 한 스크립트가 종료될 때 PHP에 의해 자동으로 제거됨).
클라이언트측 폼과 서버측의 업로드 설정이 올바르다고 가정하면, 업로드를 「풀인」하기 위해서 할 필요가 없습니다.tmp_name 경로로 마법처럼 사용할 수 있습니다.
업로드가 실제로 성공했는지 확인해야 합니다.
if ($_FILES['uploaded_file']['error'] === UPLOAD_ERR_OK) {
... attach file to email ...
}
그렇지 않으면 손상된 파일/부분 파일/존재하지 않는 파일을 첨부하려고 할 수 있습니다.
얘들아, 나한테는 아래 코드가 완벽하게 작동했어.setFrom과 addAddress를 원하는 대로 바꾸면 됩니다.
<?php
/**
* PHPMailer simple file upload and send example.
*/
//Import the PHPMailer class into the global namespace
use PHPMailer\PHPMailer\PHPMailer;
use PHPMailer\PHPMailer\Exception;
$msg = '';
if (array_key_exists('userfile', $_FILES)) {
// First handle the upload
// Don't trust provided filename - same goes for MIME types
// See http://php.net/manual/en/features.file-upload.php#114004 for more thorough upload validation
$uploadfile = tempnam(sys_get_temp_dir(), hash('sha256', $_FILES['userfile']['name']));
if (move_uploaded_file($_FILES['userfile']['tmp_name'], $uploadfile))
{
// Upload handled successfully
// Now create a message
require 'vendor/autoload.php';
$mail = new PHPMailer;
$mail->setFrom('info@example.com', 'CV from Web site');
$mail->addAddress('blabla@gmail.com', 'CV');
$mail->Subject = 'PHPMailer file sender';
$mail->Body = 'My message body';
$filename = $_FILES["userfile"]["name"]; // add this line of code to auto pick the file name
//$mail->addAttachment($uploadfile, 'My uploaded file'); use the one below instead
$mail->addAttachment($uploadfile, $filename);
if (!$mail->send())
{
$msg .= "Mailer Error: " . $mail->ErrorInfo;
}
else
{
$msg .= "Message sent!";
}
}
else
{
$msg .= 'Failed to move file to ' . $uploadfile;
}
}
?>
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<title>PHPMailer Upload</title>
</head>
<body>
<?php if (empty($msg)) { ?>
<form method="post" enctype="multipart/form-data">
<input type="hidden" name="MAX_FILE_SIZE" value="4194304" />
<input name="userfile" type="file">
<input type="submit" value="Send File">
</form>
<?php } else {
echo $msg;
} ?>
</body>
</html>
★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★.serialize()
폼에서 파일이 php로 전송되지 않았습니다.사용하는 jquery를 합니다.FormData()
를 들어.예를들면
<form id='form'>
<input type='file' name='file' />
<input type='submit' />
</form>
jquery를 사용하여
$('#form').submit(function (e) {
e.preventDefault();
var formData = new FormData(this); // grab all form contents including files
//you can then use formData and pass to ajax
});
언급URL : https://stackoverflow.com/questions/11764156/send-file-attachment-from-form-using-phpmailer-and-php
'programing' 카테고리의 다른 글
MariaDB를 사용하여 도커라이즈된 Django REST Framework 백엔드를 실행하는 방법 (0) | 2022.10.09 |
---|---|
쿼리를 최적화하기 위해 타임스탬프에 인덱스 만들기 (0) | 2022.10.09 |
그렇지 않으면 PHP 문에서 AND/OR 사용 (0) | 2022.10.09 |
PHP를 사용하여 사이트 간 요청 위조(CSRF) 토큰을 올바르게 추가하는 방법 (0) | 2022.10.08 |
panda DataFrame 열에 있는 NaN 값은 어떻게 계산합니까? (0) | 2022.10.08 |