سؤال

لست متأكدًا مما إذا كان هذا ممكنًا أم لا، ولكني أحاول إرفاق ملف برسالة بريد إلكتروني صادرة باستخدام ماندريل API من زر رفع الملف (input type="file").لأكون صادقًا، لست متأكدًا تمامًا من الأمر document.getElementById('idOfFileInput').value يعود في الواقع.أعلم أن هذا ليس المكان المناسب لطرح سؤال مبتدئ كهذا، لكنني بحثت في كل مكان ولم أتمكن من العثور عليه (أعلم أن أحدكم سيكون ماكرًا ويوجهني إلى مقالة ما في غضون خمس دقائق).وبغض النظر عن ذلك، فقد حصلت على ملف بتنسيق txt لإرفاقه بالرسالة C:\fakepath\test.txt, ، والذي أعرف أنه مسار الملف الذي يوفره المتصفح للأمان.ربما من الأفضل أن يتم طرحها في الكود:

زر:

Attachment(s):&nbsp;&nbsp;<input type="file" id="file">

شبيبة:

"attachments": [
        {
            "type": "text/*",
            "name": "file_attachment",
            "content": document.getElementById('file').value
        }
    ],

أنا آسف إذا كان هذا سؤالًا بسيطًا متنكرًا بسياقه، ولكن حتى لو كان الأمر كذلك، لدي شعور بأن هذا السؤال يمكن أن يكون مرجعًا جيدًا في المستقبل لأنني كنت أحاول الأشياء لمدة أسبوع وأبحث عن نوع من الحل، ولكن لم أتمكن من العثور على واحد.أيه أفكار؟

هل كانت مفيدة؟

المحلول

إذا أردت إرفاق ملف، يمكنك إلقاء نظرة على تحميل ملف AJAX

تتطلب واجهة برمجة تطبيقات Mandrill سلسلة مشفرة بالأساس 64 من الملف، لذلك إذا كان بإمكانك تحميل الملف، فيمكنك بسهولة جعل الخادم يعيد سلسلة مشفرة بالأساس 64 لتستخدمها في واجهة برمجة التطبيقات.

هناك الكثير من المكونات الإضافية التي ستقوم بتحميل الملفات عبر ajax، وإذا كنت تستخدم مكتبة JavaScript مثل jQuery، فيمكنك الاطلاع على تحميل ملف jQuery

إذا كنت تستخدم بي أتش بي على سبيل المثال:

$result = array();
$result['status'] = 'error';
if(isset($_FILES["mandrill_attachment"]))
{
    $base64 = base64_encode(file_get_contents($_FILES["mandrill_attachment"]["tmp_name"]));
    $result['base64'] = $base64;
    $result['status'] = 'ok';
}

die(json_encode($result));

لقد اختصرت هذا المثال، ولكن يجب عليك التحقق من أنواع الملفات وما إلى ذلك، وليس فقط افتراض أنه ملف جيد

و ال شبيبة

var mandrill_attachment = false;

$(".attachment").uploadFile({
    url: "upload.php",
    dragDrop:false,
    multiple:false,
    autoSubmit:true,
    fileName: "mandrill_attachment",    
    returnType:"json",
    onSuccess:function(files,data,xhr)
    {
        if( data.status == 'ok' )
        {
            mandrill_attachment = data.base64;
        } else {
            alert('something went wrong...');
        }
    }
});

نصائح أخرى

نظرت إلى ذلك على نطاق واسع، ويبدو أنه من المستحيل استخدام إدخال تحميل الملفات مع API Mandrill للمرفقات. مطلوب خادم لفعل أي شيء به GuardaceticeTagCode بسبب قيود الأمان التي تم وضعها في مكانها بواسطة المتصفحات.

لقد تمكنت من التجول في هذا باستخدام API INK File Sicker لوضع رابط تنزيل آمن في الجزء السفلي من البريد الإلكتروني إلى ملف، ولكن هذا يبدو مريبا قليلا. من الواضح أنه من الأفضل أن تفعل ذلك أصلا، ولكن، كما قلت، يبدو أنه مستحيل.

هذا الحل الوسط هو في بعض الطرق أفضل من الطريقة الأصلية: يسمح API Ink للمستخدمين بالتحميل من مجموعة متنوعة من الخدمات، إلى جانب تحميل الملفات الكلاسيكية، مما يحسن كل من القابلية للتمويل وسهولة استخدام آلية تحميل الملفات.

باستخدام رابط للمرفقات لا تزال تبدو مشبوهة، لكنني تمكنت من تقليل عفقة الأسلوب باستخدام اسم الملف باستخدام اسم الملف (الذي يمنحك API الوصول إليه):

تم إرفاق

[اسم الملف] (الارتباط التشعبي إلى رابط التنزيل المباشر) بهذا البريد الإلكتروني.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top