كيف يمكنني فتح برنامج البريد الافتراضي باستخدام الموضوع والنص بطريقة مشتركة بين الأنظمة الأساسية؟

StackOverflow https://stackoverflow.com/questions/17373

  •  08-06-2019
  •  | 
  •  

سؤال

كيف يمكنني فتح برنامج البريد الافتراضي باستخدام الموضوع والنص بطريقة مشتركة بين الأنظمة الأساسية؟

لسوء الحظ، هذا مخصص لتطبيق عميل مكتوب بلغة Java، وليس لموقع ويب.

أود أن يعمل هذا بطريقة مشتركة بين الأنظمة الأساسية (مما يعني Windows وMac، آسف Linux).يسعدني تنفيذ VBScript في Windows، أو AppleScript في OS X.لكن ليس لدي أي فكرة عما يجب أن تحتويه هذه النصوص.أرغب في تنفيذ البرنامج الافتراضي للمستخدم مقابل.مجرد البحث عن Outlook أو أيا كان.

في OS X، لقد حاولت تنفيذ الأمر:

open mailto:?subject=MySubject&body=TheBody

يلزم الهروب من عنوان URL لاستبدال المسافات %20.

محدث على نظام التشغيل Windows، عليك أن تلعب جميع أنواع الألعاب لتحصل عليها start لتشغيل بشكل صحيح.هنا تعويذة جافا المناسبة:

class Win32 extends OS {
    public void email(String subject, String body) throws Exception {
        String cmd = "cmd.exe /c start \"\" \"" + formatMailto(subject, body) + "\"";
        Runtime.getRuntime().exec(cmd);
    }
}
هل كانت مفيدة؟

المحلول

في Java 1.6 لديك طريقة قياسية لفتح مرسل البريد الافتراضي للنظام الأساسي:طريقة Desktop.mail(URI).يمكن استخدام URI لتعيين كافة حقول البريد (المرسل، المستلمون، النص، الموضوع).يمكنك التحقق من المثال الكامل لتكامل سطح المكتب في Java 1.6 وما بعده استخدام واجهة برمجة تطبيقات سطح المكتب في Java SE 6

نصائح أخرى

start يعمل بشكل جيد في نظام التشغيل Windows (انظر أدناه).سأستخدم برنامج Java المدمج في UrlEscape ثم أقوم فقط بتشغيل بديل ثانٍ للأحرف "+".

start mailto:"?subject=My%20Subject&body=The%20Body"

1.أضف سطر الموضوع

يمكنك ملء سطر الموضوع مسبقًا في البريد الإلكتروني عن طريق إضافة الموضوع مسبوقًا بـ "?الموضوع=" بعد عنوان البريد الإلكتروني.

وبذلك يصبح الرابط الآن:

<a href="mailto:someone@yoursite.com?subject=Mail from Our Site">Email Us</a> 

2.إرسال إلى مستلمين متعددين

يمكن إرسال البريد إلى مستلمين إضافيين إما كنسخ كربونية (cc) أو نسخ كربونية مخفية (bcc).

ويتم ذلك بطريقة مماثلة، وذلك عن طريق وضع "?cc=someoneelse@theirsite.com" بعد العنوان الأولي.

لذلك يبدو الرابط كما يلي:

<a href="mailto:someone@yoursite.com?cc=someoneelse@theirsite.com">Email Us</a>

يمكن ببساطة استبدال cc بـ bcc إذا كنت ترغب في إرسال نسخ كربونية عمياء.

يمكن أن يكون هذا مفيدًا جدًا إذا كانت لديك روابط على صفحات ذات مواضيع مختلفة.قد يكون لديك بريد إلكتروني في كل صفحة يذهب إلى الشخص المناسب في الشركة ولكن مع إرسال نسخة من جميع رسائل البريد الإلكتروني إلى عنوان مركزي أيضًا.

يمكنك بالطبع تحديد أكثر من مستلم إضافي، ما عليك سوى فصل قائمة المستلمين بفاصلة.

<a href="mailto:someone@yoursite.com?cc=someoneelse@theirsite.com, another@thatsite.com, me@mysite.com">Email Us</a> 

مصدرها الحصول على المزيد من "mailto" والتي الآن 404s.لقد استعدت المحتوى من waybackmachine.

3.رمز الجمع

يمكنك دمج الأجزاء المختلفة من التعليمات البرمجية أعلاه عن طريق إضافة علامة "&" بين كل منها.

وبذلك يضيف

me@mysite.com?subject=Hello&cc=you@yoursite.com&bcc=her@hersite.com

سأرسل بريدًا إلكترونيًا بعنوان "مرحبًا" لي ولكم وهي.

4.اكتب البريد الإلكتروني

يمكنك أيضًا ملء نص رسالة البريد الإلكتروني مسبقًا ببداية الرسالة، أو كتابة الرسالة بأكملها إذا أردت!لإضافة شيء ما إلى نص البريد الإلكتروني، يكون الأمر بسيطًا كما هو مذكور أعلاه - '?الجسم=" بعد عنوان البريد الإلكتروني.ومع ذلك، قد يكون تنسيق هذا البريد الإلكتروني أمرًا صعبًا بعض الشيء.لإنشاء مسافات بين الكلمات، سيتعين عليك استخدام الرمز السداسي - على سبيل المثال '%20"بين كل كلمة، وإنشاء أسطر جديدة يعني إضافة"%0د'.وبالمثل الرموز مثل $ يجب كتابة العلامات بالرمز السداسي.

إذا كنت ترغب أيضًا في إضافة سطر موضوع وإرسال نسخ إلى عدة مستلمين، فقد يؤدي ذلك إلى كتابة جزء من التعليمات البرمجية طويل جدًا وصعب.

سيتم إرسال رسالة إلى ثلاثة أشخاص، مع ملء الموضوع والرسالة، كل ما عليك فعله هو إضافة اسمك.

مجرد إلقاء نظرة على الكود!

<a href="mailto:abbeyvet@outfront.net?CC=spooky@outfront.net
&BCC=thomasbrunt@outfront.net&Subject=Please%2C%20I%20insist
%21&Body=Hi%0DI%20would%20like%20to%20send%20you%20
%241000000%20to%20divide%20as%20you%20see%20fit%20among
%20yourselves%20and%20all%20the%20moderators.%0DPlease%
20let%20me%20know%20to%20whom%20I%20should%20send
%20the%20check.">this link</a> 

ملحوظة:عنوان URL الأصلي للمصدر حيث وجدت هذا هو الآن 404ing لذلك أنا أمسك بالمحتوى من waybackmachine ووضعتها هنا حتى لا تضيع.أيضًا، ذكر البروتوكول الاختياري أنه لم يكن مخصصًا لموقع ويب، وهو ما تمثله هذه الأمثلة، ولكن قد تظل بعض هذه التقنيات مفيدة.

اضطررت إلى إعادة تنفيذ urlencode لأن Java's ستستخدم + للمساحة وأخذت البريد تلك حرفيًا.

لا أعرف ما إذا كانت Java تحتوي على بعض الطرق المضمنة لترميز السلسلة، ولكن هذا الرابط http://www.permadi.com/tutorial/urlEncoding/ يعرض بعض الأحرف الأكثر شيوعًا للتشفير:

;       %3B
?       %3F
/       %2F
:       %3A
#       %23
&       %24
=       %3D
+       %2B
$       %26
,       %2C
space   %20 or +
%       %25
<       %3C
>       %3E
~       %7E
%       %25

لا أعرف ما إذا كانت Java تحتوي على بعض الطرق المضمنة لترميز السلسلة، ولكن هذا الرابط http://www.permadi.com/tutorial/urlEncoding/ يعرض بعض الأحرف الأكثر شيوعًا للتشفير:

بالنسبة لترميز النسبة المئوية لأسماء URI وقيم h لـ mailto، أستخدم القواعد في http://shadow2531.com/opera/testcases/mailto/modern_mailto_uri_scheme.html#encoding.تحت http://shadow2531.com/opera/testcases/mailto/modern_mailto_uri_scheme.html#implementations, ، هناك مثال Java قد يساعدك.

في الأساس، أستخدم:

private String encodex(final String s) {
    try {
        return java.net.URLEncoder.encode(s, "utf-8").replaceAll("\\+", "%20").replaceAll("\\%0A", "%0D%0A");
    } catch (Throwable x) {
        return s;
    }
}

يجب أن تكون السلسلة التي تم تمريرها عبارة عن سلسلة تحتوي على ، وأن يتم تسوية الضالة بالفعل إلى .

لاحظ أيضًا أن مجرد إرجاع السلسلة الأصلية على استثناء كما هو مذكور أعلاه يكون آمنًا فقط إذا تم تجاوز وسيطة mailto URI التي تمررها على سطر الأوامر بشكل صحيح والاقتباس.

على النوافذ وهذا يعني:

  1. اقتبس الحجة.
  2. الهروب من أي " داخل علامات الاقتباس مع \.
  3. قم بالهروب من أي \ الذي يسبق " أو نهاية السلسلة بـ \.

أيضًا، على نظام التشغيل Windows، إذا كنت تتعامل مع سلاسل UTF-16 كما هو الحال في Java، فقد ترغب في استخدام ShellExecuteW "لفتح" عنوان URL الخاص بـ mailto.إذا لم تقم بذلك وقمت بإرجاع s على استثناء (حيث لا يتم ترميز بعض قيمة hvalue بنسبة مئوية كاملة، فقد ينتهي بك الأمر إلى تضييق بعض الأحرف العريضة وفقدان المعلومات.ولكن، لا يقبل جميع عملاء البريد وسيطات unicode، لذا، من الناحية المثالية، تريد تمرير وسيطة ascii مشفرة بنسبة مئوية بشكل صحيح مع ShellExecute.

مثل 'start'، يجب أن يفتح ShellExecute مع "open" معرف URI الخاص بـ mailto في العميل الافتراضي.

لست متأكدا من أنظمة التشغيل الأخرى.

لم أستعمل أبدا Runtime.exec(String) على نظام التشغيل Mac OS X أو أي نظام تشغيل آخر.إذا قمت بذلك، فسيتعين عليك معرفة كيفية الاقتباس بشكل صحيح لجميع سلاسل الوسيطات وما إلى ذلك؛إنه أمر مؤلم وعرضة للخطأ للغاية.

بدلا من ذلك، استخدم Runtime.exec(String[]) والذي يأخذ مجموعة من الوسائط المنفصلة بالفعل.وهذا أكثر ملاءمة لجميع الاستخدامات تقريبًا.

Mailto ليس طريقًا سيئًا للذهاب إليه.ولكن كما ذكرت، سوف تحتاج إلى التأكد من ترميزه بشكل صحيح.

المشكلة الرئيسية في استخدام mailto هي كسر الأسطر.استخدم %0A لأحرف الإرجاع، و%20 للمسافات.

ضع في اعتبارك أيضًا أن mailto يعتبر نفس عنوان URL من نوع ما، وبالتالي سيكون له نفس القيود على الطول.يرىhttp://support.microsoft.com/kb/208427, ، لاحظ أن الحد الأقصى لطول عنوان URL هو 2083 حرفًا.تم تأكيد هذا لـ Mailto أيضًا في هذه المقالة: http://support.microsoft.com/kb/279460/en-us.أيضًا، يمكن أيضًا أن يكون لبعض عملاء البريد حدًا (أعتقد أن الإصدارات الأقدم من Outlook Express كان لها حد أصغر بكثير مثل 483 حرفًا أو شيء من هذا القبيل.إذا كنت تتوقع أن يكون لديك سلسلة أطول من ذلك فسوف تحتاج إلى النظر في البدائل.

راجع للشغل، لا ينبغي عليك اللجوء إلى طرد برنامج نصي للقيام بذلك طالما يمكنك إصدار أمر من Java (لا أعرف إذا كان بإمكانك ذلك لأنني لا أستخدم Java).

يمكنك استخدام هذا ...

main(string[] args){    
String forUri = String.format("mailto:?subject=%s&body=%s",  urlEncode(sub), urlEncode(mailBody));
                        Desktop.getDesktop().mail(new URI(forUri));
}

private static final String urlEncode(String str) {
        try {
            return URLEncoder.encode(str, "UTF-8").replace("+", "%20");
        } catch (UnsupportedEncodingException e) {
            throw new RuntimeException(e);
        }
    }

أيضا لتنسيق القراءة طريقة بسيطة لإرسال رسائل البريد الإلكتروني في جافا:روابط البريد إلى

لقد قمت بتنفيذ هذا، وهو يعمل بشكل جيد على OS X.(لم يتم تدوين ذكر رايان للحد الأقصى لطول عنوان URL.)

public void email(String subject, String body) throws Exception {
    String cmd = "open mailto:";        
    cmd += "?subject=" + urlEncode(subject);
    cmd += "&body=" + urlEncode(body);
    Runtime.getRuntime().exec(cmd);
}

private static String urlEncode(String s) {
    StringBuilder sb = new StringBuilder();
    for (int i = 0; i < s.length(); i++) {
        char ch = s.charAt(i);
        if (Character.isLetterOrDigit(ch)) {
            sb.append(ch);
        }
        else {
            sb.append(String.format("%%%02X", (int)ch));
        }
    }
    return sb.toString();
}

اضطررت إلى إعادة تنفيذ URLencode لأن Java ستستخدمه + للفضاء والبريد أخذوا تلك حرفيا.لم يتم اختباره على نظام التشغيل Windows حتى الآن.

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