Мы отправляем pdf-файл с идентификатором электронной почты и темой (строковый формат) на сервер, используя приложение Unity на платформах - Android, IOS и Editor.
На сервере выполняется следующий скрипт php, которыйотправляет почту и pdf-файл, который мы отправляем из приложения Unity.
Когда мы отправляем почтовое вложение через простой http-сервер, оно отправляется должным образом из Android, ios и редактора.
Но с https-сервером или http-serrver-with-SMTP-протоколом вложение pdf становится поврежденным и показывает неверный формат только при отправке с устройств ios.
При отправке с android и Unity принимается правильное вложение pdfредактор, но показывает неверный формат для pdf при отправке с устройствами ios.
Пожалуйста, исправьте нас, если мы где-то ошибаемся, и предоставьте нам правильное решение.
Ниже приведены фрагменты, используемые в скриптах php и c #.
/************* Normal PHP mail Function *************/
<?php
//This attaches the file
$semi_rand = md5(time());
$mime_boundary = "==Multipart_Boundary_x{$semi_rand}x";
$headers .= "\nMIME-Version: 1.0\n" .
"Content-Type: multipart/mixed;\n" .
" boundary=\"{$mime_boundary}\"";
$message = "This is a multi-part message in MIME format.\n\n" .
"-{$mime_boundary}\n" .
"Content-Type: text/plain; charset=\"iso-8859-1\n" .
"Content-Transfer-Encoding: 7bit\n\n" .
$mainMessage . "\n\n";
$data = chunk_split(base64_encode($data));
$message .= "--{$mime_boundary}\n" .
"Content-Type: {$fileatttype};\n" .
" name=\"{$fileattname}\"\n" .
"Content-Disposition: attachment;\n" .
" filename=\"{$fileattname}\"\n" .
"Content-Transfer-Encoding: base64\n\n" .
$data . "\n\n" .
"-{$mime_boundary}-\n";
// Send the email
if(mail($to, $subject, $message, $headers)) {
echo "The email was sent.";
}
else {
echo "There was an error sending the mail.";
}
?>
/ ********************* SMTP MAIL *************************** /
<?php
// Import PHPMailer classes into the global namespace
// These must be at the top of your script, not inside a function
use PHPMailer\PHPMailer\PHPMailer;
use PHPMailer\PHPMailer\Exception;
//Load Composer's autoloader
require 'vendor/autoload.php';
$mail = new PHPMailer(true); // Passing `true` enables exceptions
try {
//Server settings
//$mail->SMTPDebug = 2; // Enable verbose debug output
$mail->isSMTP(); // Set mailer to use SMTP
$mail->Host = 'smtp.gmail.com'; // 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->SMTPOptions = array(
'ssl' => array(
'verify_peer' => false,
'verify_peer_name' => false,
'allow_self_signed' => true
));
//Recipients
$mail->setFrom('from',$name);
$mail->addAddress($email,$name); // Add a recipient
$mail->addAttachment($_FILES['file']['tmp_name'],$_FILES['file']['name']);
// Add attachments
//Content
$mail->isHTML(true); // Set email format to HTML
$mail->Subject = $subject;
$mail->Body = 'This is the HTML message body <b>in bold!</b>';
$mail->AltBody = 'This is the body in plain text for non-HTML mail
clients';
$mail->MsgHTML($mainMessage); // Message body
$mail->send();
echo json_encode(array('status'=>'1','msg'=>'Message has been sent'));
} catch (Exception $e) {
echo json_encode(array('status'=>'0','msg'=>'Message could not be sent.
Mailer Error: ', $mail->ErrorInfo));
}
?>
/ ****************************** В Unity c # *********************************** /
public InputField EmailID;
string URL = "Link_Of_Above_Script/api-phpmail.php";
IEnumerator DownloadPDF(string url)
{
String myEmail = EmailID.text;
WWW www = new WWW(url);
yield return www;
StartCoroutine(SendPDF(URL, myEmail, www.bytes));
}
IEnumerator SendPDF(string url,string name,byte[] b)
{
//Content-Type
//multipart/form-data
WWWForm form = new WWWForm();
form.AddField("email", name);
form.AddField("subject", "Subject Of the mail");
form.AddBinaryData("file", b,FileName, "application/octet-
stream");
byte[] rawData = form.data;
Dictionary<string, string> headers = form.headers;
form.headers["Content-Type"] = "multipart/form-data";
WWW www = new WWW(url,rawData,headers);
yield return www;
Debug.Log(www.text);
}