سؤال

أقوم بأتمتة Outlook وأحتاج إلى التحكم في مرسل البريد الإلكتروني.سيكون لدى المستخدمين حسابان أو أكثر تم إعدادهما في Outlook وأحتاج إلى أن أكون قادرًا على تحديد الحساب الذي سأرسل البريد الإلكتروني منه.أيه أفكار؟

يحتاج إلى دعم في Outlook 2003 وما فوق.أنا أستخدم دلفي 2006 لترميز هذا، لكن هذا لا يهم حقًا.

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

المحلول

كتب شخص يُدعى سو موشر ملخصًا جميلاً حول هذه المشكلة في microsoft.public.office.developer.outlook.vba.

باختصار الأمر يتلخص في أحد أمرين:

  • يستخدم MailItem.SentOnBehalfOfName, ، والذي يعمل فقط في بيئات Exchange (أفترض أن هذا هو الحال بالنسبة لك) - عندما يكون لدى المستخدم أذونات "إرسال باسم" لصندوق بريد Exchange الآخر، فإن هذا يشبه إلى حد كبير تبديل الحسابات.
  • استخدم اختراقًا صغيرًا يتضمن العبث بـ CommandBars
  • استخدم استرداد Outlook
  • (في OL2007، سيكون لديك MailItem.SendUsingAccount)

نصائح أخرى

والتوسع قليلا على الاجابة المقبولة، أنا في حاجة إلى تنفيذ دلفي وظيفة set_account سو. لا يمكن العثور على أي شيء على شبكة الإنترنت في أي مكان لذلك، حتى هنا هو تفسير دلفي رمز سو.

Function SetAccount(TargetAccount:string; var MailItem:OLEVariant):boolean;
var OLI,CBs,CBP,MC:olevariant;
    strAccountBtnName:String;
    i,t:Integer;
    FoundAccount:Boolean;
Const ID_ACCOUNTS = 31224;
begin
    FoundAccount:=false;
    OLI:=MailItem.GetInspector;
    CBs:=OLI.CommandBars;
    CBP:=CBs.FindControl(, ID_ACCOUNTS);
    t:=1;
    while (not FoundAccount) and (t<=CBP.Controls.Count) do begin
       MC:=CBP.Controls[t];
       i:=Pos(' ',MC.Caption);
       if i > 0 Then strAccountBtnName:=Copy(MC.Caption,i+1,Length(MC.Caption)-i)
       else strAccountBtnName:=MC.Caption;
       if strAccountBtnName = TargetAccount then begin
           MC.Execute;
           FoundAccount:=true;
       end;
       inc(t);
    end;
    Result:=FoundAccount;
end;

والائتمان لسو موشر، شكرا لك، لا يمكن أن فعلت ذلك دون لكم :)

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