Неправильный файл PDF, отправленный на сервер из приложения Unity Ios. (Работает на Android и Unity Editor) - PullRequest
0 голосов
/ 13 сентября 2018

Мы отправляем 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);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...