واحد پشتیبانی نرم افزار » » پیاده سازی مبادله الکترونیک مکاتبات با استاندارد ECE

پیاده سازی مبادله الکترونیک مکاتبات با استاندارد ECE

تقریبا تمامی تولید کنندگان نرم افزارهای اتوماسیون اداری ، پس از ابلاغ معاونت راهبردی ریاست جمهوری مبنی بر انتخاب نرم افزارهایی که از پروتوکل ECE استفاده می کنند ، اقدام به پیاده سازی امکان تبادل مکاتبات به گونه ECE نموده اند.

اما بسیاری از شرکتهای کوچکتر ، هنوز در رویه پیاده سازی آن با مشکلاتی مواجه اند که اینموضوع ، عملا مبادله پبام با سایر نرم افزارهای اتوماسیون اداری را غیر ممکن ساخته است.

مستندات مربوط به این پروتوکل در سامانه http://www.ecep.ir بطور کامل وجود دارد.

در این مقاله سعی بر آنست که به پیاده سازی مرحله به مرحله روش مبادله ECE و مشکلات احتمالی بپردازیم.پلتفرم مورد بحث دلفی بوده لکن با اندک تغییرات ، قابل استفاده در ویژوال استودیو می باشد.

مقدمه:

پیش از پرداختن به پیاده سازی روش مبادله فوق ، لازمست بدانیم:

۱- پروتوکول مورد بحث ، از بستر پست الکترونیکی نوع POP/SMTP استفاده می کند.بنابر این پیامها با استفاده از SMTP ارسال و مکاتبات دریافتی باید با استفاده از POP دریافت و بررسی و در صورت لزوم در دبیرخانه ثبت گردند.

۲- در پروتوکول ECE به ازای هر مکاتبه مورد نظر جهت ارسال ، یک پرونده XML با ساختار و شمای معرفی شده در مستندات ECE تولید می شود.این پرونده شامل مشخصات شناسنانه ای مکاتبه(شماره ثبت ، تاریخ ثبت ، موضوع نامه ، فوریت نامه، محرمانگی نامه ، فرستنده ، گیرنده/گیرندگان نامه) ، و همچنین متن نامه مورد نظر به قالبهای استانداری همچون doc یا docx یا pdf یا tif یا bmp یا jpg می باشد.ضمائم و پیوستهای نامه می تواند بصورت بخشی از نامه اصلی(که در ادامه تصویر نامه اضافه شده باشد) و یا با استفاده از پرکردن بخش Attachments از پرونده ECE با درنظر گرفتن مستندات ارائه شده ، در پرونده تولید شده XML درج گردند.

۳- پرونده XML تولید شده ، نهایتا با استفاده از SMTP Server ، به گیرنده/گیرندگان ، ایمیل می شود.

ابزارهای مورد نیاز:

۱- محیط برنامه سازی دلفی

۲- کنترل های ایمیل مربوط به پکیج Indy.این پکیج بطور پیشفرض در دلفی نصب شده و در قسمت Indy Clients از نوار کامپاننت دلفی در دسترس هستند.

۳- یک اکانت POP/SMTP Server: شامل Username و Password و POP Server Address و SMTP Server Address و پورتهای POP وSMTP .بعنوان نمونه برای تست می توانید از اکانت gmail استفاده کنید.اما توجه داشته باشید که سرویس POP/SMTP بطور پیشفرض در جیمیل فعال نیست و باید با ورود به بخش Setting گزینه مربوطه را فعال نمایید:

http://www.google.com/mail/help/images/screenshots/enable_pop/pop.gif

۴- یک نرم افزار ویرایشگر XML: یکی از بهترین نرم افزارها در این زمینه Oxygen XML Editor  می باشد که می توانید از لینک زیر دانلود نمایید:
http://rapidshare.com/files/322464135/O.x.y.g.e.n.X.M.L.E.d.i.t.o.r.v11.1.rar

مراحل پیاده سازی:

۱- تولید پرونده XML:


uses
xmldom,XMLIntf, msxmldom, XMLDoc,
SZCodeBaseX;

procedure CreateECEXMLDocument;

var

ms:TMemoryStream;

d,ns ,afc:WideString;

XMLDoc:TXMLDocument;

aln,aln2,aln3,an,ann:IXMLNode;

n,i:integer; sl:TStringList;

ss:TStringStream;

begin
XMLDoc:=TXMLDocument.Create(Self);

XMLDoc.Active:= True;

XMLDoc.version:= ‘1.0′;

XMLDoc.Encoding:=’UTF-8′;

XMLDoc.Options:=[doNodeAutoIndent];

ann:=xmlDoc.AddChild(’Letter’,”);

ns:=’http://www.irica.com/ECE/1383-12/SendSchema’;

ann.Attributes['xmlns']:= ns;
ann.Attributes['Any']:=”;

ss:=TStringStream.Create(”);
ms:=TMemoryStream.Create;


SZEncodeBase64(’c:\MYLETTER.TIF’,ss);

فرض آنست که تصویر نامه قبلا در c:\MYLETTER.TIF ذخیره شده است//

afc:=ss.DataString;


aln:=XMLDoc.ChildNodes.FindNode(’Letter’);

an:=aln.AddChild(’Protocol’,ns);

an.Attributes['Name']:=’ECE’;

an.Attributes['Version']:=’1.01′;

an:=aln.AddChild(’Software’,ns);


an.Attributes['SoftwareDeveloper']:=’G.A.M.A TSA Co’;

an.Attributes['Version']:=’7.1′;


an.Attributes['GUID']:=’9D4E9BE2-6573-412F-9AA0-4654A4901005′;

مقدار GUID توسط شرکت سازنده
بصورت اختیاری پر می شود و در حال حاضر مقدارآن اهمیتی ندارد //

an:=aln.AddChild(’Sender’,ns);

an.Attributes['Organization']:=’اداره کل منابع طبیعی سمنان‘;

an.Attributes['Department']:=’حوزه مدیریت‘;

an.Attributes['Position']:=’مدیر کل‘;

an.Attributes['Name']:=’مهندس …..‘;

an.Attributes['Code']:=’2322‘;

an.Attributes['Any']:=”;

an:=aln.AddChild(’Receiver’,ns);

an.Attributes['Organization']:=’سازمان جنگلها و مراتع کشور‘;

an.Attributes['Department']:=’اداره کل امور اداری‘;

an.Attributes['Position']:=’مدیر کل‘;

an.Attributes['Name']:=’جناب آقای
مهندس…..
‘;

an.Attributes['Code']:=’56433′;


an.Attributes['ReceiveType']:=’Origin’;

an.Attributes['Any']:=”;


an:=aln.AddChild(’OtherReceivers’,ns);

فرض بر آنست که این نامه تنها یک گیرنده داشته و لذا تنها یک تگ
OtherReceivers بدون فرزند ،
ایجاد می گردد.//

an:=aln.AddChild(’LetterNo’,ns);

an.Attributes['Any']:=”;

an.NodeValue:=’374321/21/الف‘;


an:=aln.AddChild(’LetterDateTime’,ns);


an.Attributes['ShowAs']:=’gregorian’;

an.Attributes['Any']:=”;

d:=solartochrists();


d:=StringReplace(d,’/',’-',[rfReplaceAll]);


d:=d+’T'+trim(LeftStr(TimeToStr(Now),5))+’:01′;

an.NodeValue:=d;

در خطوط فوق ابتدا تاریخ شمسی به میلادی تبدیل گردیده و سپس به فرمت
ISO 8601 تبدیل می گردد.//


an:=aln.AddChild(’RelatedLetters’,ns);

an:=aln.AddChild(’Subject’,ns);

an.NodeValue:=’تعیین تکلیف اراضی
اختلافی دامغان
‘;

an.Attributes['Any']:=”;

an:=aln.AddChild(’Priority’,ns);

an.Attributes['Name']:=’عادی‘;

an.Attributes['Code']:=’1′;

an.Attributes['Any']:=”;


an:=aln.AddChild(’Classification’,ns);

an.Attributes['Name']:=’عادی‘;

an.Attributes['Code']:=’1′;

an.Attributes['Any']:=”;

an:=aln.AddChild(’Keywords’,ns);

aln2:=aln.AddChild(’Origins’,ns);

an:=aln2.AddChild(’Origin’,ns);


an.Attributes['ContentType']:=’image/tiff’;


an.Attributes['Extension']:=’tif’;


an.Attributes['Description']:=’تصویر نامه‘;


an.Attributes['Any']:=”;

an.NodeValue:=afc;

اگر نامه شامل پیوست باشد ، خطوط زیر جهت درج پیوست در پرونده بکار می رود:


aln3:=aln.AddChild(’Attachments’,ns);

if assigned(ss) then ss.Free;


ss:=TStringStream.Create(”);


SZEncodeBase64(’c:\myAttach1.TIF’,ss);


afc:=ss.DataString;


an:=aln3.AddChild(’Attachment’,ns);


an.Attributes['ContentType']:=’image/tiff’;


an.Attributes['Extension']:=’tif’;


an.Attributes['Description']:=’تصویر پیوست‘;


an.Attributes['Any']:=”;


an.NodeValue:=afc;

ms.Free;

XMLDoc.SaveToFile(’c:\ece_test.xml’);

end;

همانطورکه در کد بالا مشاهده می شود ، پرونده نهایی در گردونه C بنام ece_test.xml ساخته می شود.توجه داشته باشید که پرونده های باینری مانند پرونده های doc و tif و …. باید به فرمت Base64 در فایل نهایی قرار بگیرند و بهمین منظور از یونیت SZCodeBaseX  و فانکشن SZEncodeBase64 آن استفاده شده است.این یونیت براحتی با جستجو در google قابل دانلود می باشد.

یک نمونه پرونده تولید شده با استفاده از تابع فوق از لینک زیر قابل دریافت می باشد:
ece_test.xml
2- ارسال پرونده از طریق ابمبل:

در مرحله بعد ، می توانید پرونده ece_test.xml تولید شده را که حاوی مشخصات شناسنامه ای نامه و تصویر آن می باشد ، با استفاده از پروتوکل SMTP و سرویس دهنده پست الکترونیکی (مثلا gmail) ارسال نمایید.

نکته مهم در ارسال نامه از طریق ایمیل آنست که برخی شرکتهای تولید کننده اتوماسیون اداری ، (مانند همکاران سیستم) اقدام به افزودن یک فیلد جدید به سرآیند (Header) پست الکترونیک می نمایند.این موضوع جهت شناسایی ایمیل ارسالی بعنوان یک مکاتبه الکترونیکی انجام شده و باعث می شود که گیرنده بتواند ایمیلهای دریافتی را که از نوع مکاتبه اداری با پروتوکل ECE هستند از ایمیلهای دیگر که ممکن است مکاتبه الکترونیکی نباشند تمییز دهد.گرچه افزودن این فیلد جدید (که در مستندات ECE بنام X-ECE_SEND و با مقدار ۱٫۰۱ تعریف شده است) بصورت یک عمل اختیاری(Optional) تعریف شده و نه اجباری ، لکن توصیه می شود برای سازگاری حداکثر با سایر اتوماسیونهای اداری ، این حوزه نیز به Mail Header اضافه گردد.

نمونه کد ارسال(شامل اضافه نمودن فیلد  X-ECE_SEND به Mail Header) بشرح  زیر می باشد:

Uses

IdBaseComponent, IdComponent, IdTCPConnection,IdTCPClient, IdMessageClient,IdPOP3, IdSMTP, IdHeaderList;

procedure SendByMail(mn:smallint;af:string);

var

ex:TIdHeaderList;

IdMsgSend:TIdMessage;

Begin

IdMsgSend:=TIdMessage.Create(Self);

IdMsgSend.MessageParts.Clear;

TIdAttachment.Create(IdMsgSend.MessageParts, ‘c:\ece_test.xml’);

ex:=TIdHeaderList.Create;

ex.Values['X-ECE_SEND']:=’1.01′;

with IdMsgSend do

begin

Body.Text:=’تصویر نامه به پیوست می باشد‘;

From.Text:=’info@tsa-co.ir’;

Recipients.EMailAddresses:=’ece@frw.ir’;

Subject:=’تعیین تکلیف اراضی اختلافی دامغان‘;

Priority:=TIdMessagePriority(mpHighest);

Headers.Add(’X-ECE_SEND: 1.01′);

SetExtraHeaders(ex);

end;

SMTP.UserID := ‘dp.semnan@frw.org.ir’;

SMTP.Password := ‘mypassword’;

SMTP.Host := ‘ mail.frw.org.ir’;

SMTP.Port := 25;

if not SMTP.Connected then SMTP.Connect;

SMTP.Send(IdMsgSend);

SMTP.Disconnect;

end;

اگر گیرنده را بصورت آزمایشی ، یک اکانت gmail تعریف کرده باشید ، با چک کردن ایمیل رسیده در gmail و سپس کلیک بر روی گزینه Show Orginal در آن ، می توانید اضافه شدن فیلد X-ECE_SEND  را ببینید.بعنوان نمونه:

….
….
….
Authentication-Results: mx.google.com; spf=neutral (google.com: 87.247.177.2 is neither permitted nor denied by best guess record for domain of dp.khuzestan@frw.org.ir) smtp.mail=dp.khuzestan@frw.org.ir
Message-Id: <4b672eba.1102be0a.1dd1.68a5SMTPIN_ADDED@mx.google.com>
Received: from UnknownHost [78.39.193.152] by mail.nedahosting.net with SMTP;
Mon, 1 Feb 2010 23:13:45 +0330
From: dp.khuzestan@frw.org.ir
Subject: Re:ECE 1388/11/12
To: gama@gmail.com
Content-Type: multipart/mixed; boundary=”=_NextPart_2rfkindysadvnqw3nerasdf”;
MIME-Version: 1.0
Date: Mon, 1 Feb 2010 23:12:20 +0330
X-Priority: 1
X-Library: Indy 8.0.25
X-ECE_SEND: 1.01
X-Cyberoam-Version: 9.6.0.62
X-Cyberoam-smtpxy-version: 1.0.7.0
X-Cyberoam-AV-Status: Clean
X-Cyberoam-Proto: SMTP
X-Cyberoam-AV-Policy: None
X-Cyberoam-AS-Policy: Global Spam Policy
….
….
….

This is a multi-part message in MIME format

امید است مقاله فوق بتواند راهگشای شرکتهای تولید کننده نرم افزارهای اتوماسیون اداری باشد.

این مقاله هم رو می توانید ببینید:

http://tsa-co.ir/blogs/support/?p=69

این نوشته در تاریخ چهارشنبه, بهمن ۱۴م, ۱۳۸۸ ساعت ۴:۴۳ ب.ظ در دسته متفرقه پست شده است. شما میتوانید از طریق RSS نظرات دیگران را پیگیری کنید RSS 2.0. شما می توانید دیدگاهتان را بنویسید, یا از سایت خودتان بازتاب بفرستید.


۷ دیدگاه برای “پیاده سازی مبادله الکترونیک مکاتبات با استاندارد ECE”

  1. SReza می‌گه:

    سلام
    در بخش پشتیبانی مقاله‌ای در خصوص استفاده از ECE ذکر شده است. اول تشکر کنم که بالاخره کسی پیدا شد که اطلاعات مفیدی در این خصوص منتشر کنه. چون به نظر من تو خود سایت ece اطلاعات کافی گذاشته نشده است.
    چند تا سوال دارم :
    ۱- در مقاله طریقه ارسال گذاشته شده است. اگر امکان دارد طریقه خواندن این فرمت نیز گذاشته شود. یعنی غیر از تابع CreateECEXMLDocument تابعی هم به عنوان LoadECEXMLDocumnet هم گذاشته شود.همنیطور نحوه EmailReceive
    2- آیا کامپوننتی که برای SMPT استفاده کردید از نوع TIdSMTP می‌باشد؟
    ۳- طریقه ارسال از طریق hotmail چطور است؟ فرض کنید مقصد Dest@hotmail.com و مبدا Sour@hotmail.com است. با کلمه رمز MyPassword
    باز هم از بابت مقاله ممنونم

  2. مدیر پروژه های نرم افزاری می‌گه:

    لطفا مقاله جدید در این زمینه را ببینید:
    http://tsa-co.ir/blogs/support/?p=69

  3. افشار محبی می‌گه:

    مطلب مفیدی بود. ممنون.

  4. نادر می‌گه:

    من در ارسال ایمیل با کمپوننت Indy در بخش موضوع و محتوا با زبان فارسی مشکل دارم. چکار کنم. همه فارسی ها علامت سوال دیده میشه. Charset رو هم utf-8 کردم ولی فرقی نکرد.

  5. مدیر پروژه های نرم افزاری می‌گه:

    دوست عزیز اگر از کامپاننت Indy در دلفی ۵ و ۶ و ۷ استفاده می کنید چون مجموعه فوق برای این محیطها و خود این پلاتفرمها از یونیکد پشتیبانی نمی کنند عملا شما ایمیل رو بصورت غیر یونیکد می فرستید با این تفاوت که محتوا رو یونیکد ست می کنید و این موضوع باعث میشود که حتی براوزرهای هوشمند هم نتوانند اونرو بازخوانی کنند.
    برای ارسال ایمیل یونیکد که مشکل فارسی در اون نداشته باشید باید هم پلاتفرمتون یونیکد باشه مثلا دلفی ۲۰۱۰ و یا ۲۰۰۹ و یا ۲۰۰۶ و هم Indy استفاده شده در اون هم یونیکد باشه که ورژن ۱۰ اون این قابلیت رو داره.
    موفق باشید.

  6. یک استفاده کننده می‌گه:

    سلام و متشکر از مطالب مفیدتون.
    من یک استفاده کننده از سیستم ECE هستم نه یک برنامه نویس٫ میخوام فایلهایxml ی که توسط یک نرم افزار و با فرمت ECE‌تولید شده رو به صورت دستی به یک ایمیل دیگه بفرستم. اما چون در ارسال دستی، تگ X-ECE_SEND رو نمیتونم به هدر ایمیلم اضافه کنم، نرم افزار شرکتهایی مثل “همکاران سیتم” اونو به عنوان یک نامه ECE تشخیص نمیدن.
    آیا راه یا نرم افزاری هست که بتونم هنگام ارسال xml تگ مورد نیاز رو به هدر ایمیل اضافه کنم؟(با طراح نرم افزارمون و همچنین همکاران تماس گرفتم. اما هیچکدوم نتونستن راهی پیش پام بذارن)

  7. مدیر پروژه های نرم افزاری می‌گه:

    با سلام
    متاسفانه سرویس های پست الکترونیکی Web-Based مانند yahoo و gmail اگر بصورت وب ایمیل ارسال کنید امکان تغییر یا افزودن Custom Header که در موضوع مورد اشاره شما فیلد X-ECE_SEND هست ، وجود نداره.
    اما اگر آپشن POP رو در Yahoo فعال کنید (البته این سرویس در یاهو رایگان نیست) و یا همین سرویس رو در Gmail (که رایگانه و از طریق Setting در ایمیل اکانتتون قابل فعال شدنه) اونوقت میتونید با استفاده از نرم افزار Mozilla Thunderbird این تگ رو به Header اضافه کنید و روش کار در زیر آمده است:

    http://email.about.com/od/mozillathunderbirdtips/qt/Add_an_Arbitrary_Custom_Header_to_Mozilla_Thunderbird.htm

    اما ، مطمئن ترین روش ، برنامه نویسی هست که نمونه کد بزبان دلفی در http://tsa-co.ir/blogs/support/?p=69 وجود دارد و نمیدونم چرا شرکت تولید کننده نرم افزارتون به رغم وجود یک نمونه با سورس در این نشانی ، توانایی پیاده سازی رو نداره!
    در عین حال ، در لینک http://tsa-co.ir/blogs/support/?p=69 اگر دانلود کنید یک برنامه exe هست که میتونید با استفاده از اون و انجام تنظیمات POP/SMTP فایل مورد نظر رو ارسال کنید و این برنامه خودش تگ ECE رو اضافه می کنه.تنها موضوع این هست که نمونه سورس کد برای کار با gmail بهینه نشده و برای سرور ایمیل باید از سرویسهای POP و SMTP دیگری استفاده کنید که با پورت ۲۵ کار می کنند و نه در حالت SSL
    گرچه توسعه سورس فوق برای کار با SSL مثلا GMAIL کار دشواری نیست.
    موفق باشید.

دیدگاهتان را بنویسید