ايران ويج

نسخه‌ی کامل: خواهش دارم
شما در حال مشاهده‌ی نسخه‌ی متنی این صفحه می‌باشید. مشاهده‌ی نسخه‌ی کامل با قالب بندی مناسب.
سلام
خسته نباشيد
لطفا برنامه فرستادن ميل وگرفتن ميل را براي من بفرستيد خواهش دارم
كمكم كنيد
برای فرستادن mail باید از idsmtp از کامپوننتهای indyclientاستفاده کنی وبرای متن mailاز idmessageواگه با فایل خواستی بفرستی idattechment
برای چک کردن mailهم باید از pop3 استفاده کنی
این برای ارسال mail هستش خیلی وقت پیش نوشتم ببین به دردت میخوره به یه کمی تغییر احتیاج داره فکر کنم
unit Unit4;

interface

uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, IdMessage, IdBaseComponent, IdComponent,
IdTCPConnection, IdTCPClient, IdMessageClient, IdSMTP, ToolWin, ComCtrls;

type
TForm1 = class(TForm)
ToolBar1: TToolBar;
Button1: TButton;
IdSMTP1: TIdSMTP;
IdMessage1: TIdMessage;
Memo1: TMemo;
Label1: TLabel;
Edit1: TEdit;
Button2: TButton;
Label2: TLabel;
Edit2: TEdit;
OpenDialog1: TOpenDialog;
Label3: TLabel;
Edit3: TEdit;
StatusBar1: TStatusBar;
procedure Button1Click(Sender: TObject);
procedure Button2Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;

var
Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
begin
idmessage1.Body.Add(memo1.Text);
idmessage1.From.Text:='ghoroobe_delangiz2002@yahoo.com.com';
idmessage1.Recipients.EMailAddresses:=edit1.Text;
idmessage1.Subject:='salam';
if edit2.Text>''then
begin
tidattachment.Create(idmessage1.MessageParts,edit1.Text);
end;
idsmtp1.Host:= edit3.Text;
idsmtp1.Connect();
statusbar1.SimpleText:='connect to server';
try
idsmtp1.Send(idmessage1);
statusbar1.SimpleText:='sending mail...';
finally
idsmtp1.Disconnect;
statusbar1.SimpleText:='done!';
end;
end;
procedure TForm1.Button2Click(Sender: TObject);
begin
if opendialog1.Execute then
edit2.Text:=opendialog1.FileName;
end;
//for yahoo hostname==mx1.mail.yahoo.com//
end.
برای دریافت mailاز یک سرور باید ازidpop3استفاده کنی
procedure TForm1.Button1Click(Sender: TObject);
var FMsgCount: integer;
var intIndex: integer;
var i: integer;
begin
memo1.Clear;
idPOP31.Host := 'pop.mail.de';
//idPOP.Port := Pop3ServerPort;
idPOP31.Username := 'mustermann@provider.de';
idPOP31.Password := 'xyzpasswort';
idPOP31.Connect;
FMsgCount := idPOP31.CheckMessages;
label2.Caption:=inttostr(FMsgCount);
//for i:=1 to FMsgCount do
//begin
//POP.Retrieve(i, IdMessage1);
idPOP31.Retrieve(strtoint(edit1.text), IdMessage1);
for intIndex := 0 to Pred(IdMessage1.MessageParts.Count) do begin
if (IdMessage1.MessageParts.Items[intIndex] is TIdAttachment) then
begin
memo1.lines.add(TIdAttachment(IdMessage1.MessageParts.Items[intIndex]).Filename);
end;
end;
//end;
idpop31.disconnect;
end;


end.
جدیدا انگار پورت 25 را بستن
من هرچی میل تو اصفهان و قم با پورت 25 فرستادم خطای 110053 می ده
اقا من با این idsmtp هرچی که سابجکتش فارسی باشه میفرسته خودش تبدیل میکنه به استاندارد ISO-xyz (عددش را یادم نیست ) هرچی به زبون خوش میگم بابا استاندارد سابجکتت utf-8 باید باشه ، دیوانه خودش ورمیداره تبدیل میکنه میفرسته اونطرف هم دیگه تکلیف کاراکترهای عجیب غریبش مشخصه

چه کنم ؟
کد:
msg:=TIdMessage.Create(nil);
msg.CharSet:='utf-8';
msg.ContentType:='text/html';
Msg.ContentTransferEncoding := 'base64';
msg.Encoding:=meMIME;
Subj:=UTF8Encode ('سابجکت');
msg.Subject:= subj;
Msg.ContentTransferEncoding := '7bit'; // <- RAW

هدری که بهم میده اینطوریه :
کد:
Return-path: <admin@alaaaat.ir>
Envelope-to: admin@alvvvvvt.ir
Delivery-date: Wed, 12 Jan 2011 07:31:41 +0100
Received: from [204.145.90.125] (helo=comp)
    by server8g.axspace.com with esmtpa (Exim 4.69)
    (envelope-from <admin@aaaaalt.ir>)
    id 1PcuFA-0003Yv-TI
    for admin@alaaaaaat.ir; Wed, 12 Jan 2011 07:31:41 +0100
From: admin@alddddt.ir
Subject: =?ISO-8859-1?Q?=D3=C7=C8=CC=98=CA?=
To: admin@alaaaaaaat.ir
Content-Type: text/html;
    charset="utf-8"
Date: Wed, 12 Jan 2011 09:58:09 +0330
X-Priority: 1
X-Library: Indy 9.00.10

Memo1
تست متن
آدرسهای ایمیل تغییر داده شدن که این رباتها بیچارم نکنن
مشکل از از کامپوننت نیست ؛
اگه سابجکت فارسی باسه به صورت کد شده میاد واست (اونی که میزنی utf8 ؛ واسه اینه که سرور بفهمه )
در هر حال باید بعد از دریافت هدر سند شده از سرور ؛ خودت تو سمت کلاینت تبدیلش کنی (دیکدش کنی) به متن مورد نظر !!
(۲۲-دى-۱۳۸۹, ۱۳:۲۰:۵۹)babyy نوشته است: [ -> ]مشکل از از کامپوننت نیست ؛
اگه سابجکت فارسی باسه به صورت کد شده میاد واست (اونی که میزنی utf8 ؛ واسه اینه که سرور بفهمه )
در هر حال باید بعد از دریافت هدر سند شده از سرور ؛ خودت تو سمت کلاینت تبدیلش کنی (دیکدش کنی) به متن مورد نظر !!

کلاینت فقط میفرسته ، جائی که بشه درستش کرد که توی این کامپوننت های indy ندیدم
تنها راه موجود که فعلا ظاهرا جوابگو هست ( ولی آب انار لازم داره تا بنویسم ) اینه که بیام کدهای معادل را پیدا کنم
مثلا
کد:
=D8=A7=20 ا
=D8=A8=20 ب
=D8=A9=20 ة
=D9=BE=20 پ
=D8=AA=20 ت
=D8=AB=20 ث
=D8=AC=20 ج
و سابجکت را اینطوری بنویسم ( مثلا برای لغت "تست" ) سابجکت برای اینکه در همه جا فارسی صحیح نشون داده بشه
کد:
Subj:='=?UTF-8?Q?=D8=AA=D8=B3=D8=AA?=';
اما اعصاب میبره و فکر کنم اگه بعد که تابع تبدیل را نوشتم یکی بیاد بگه این تابع آماده قبلا بوده ، اونوقت خودکشی کنم :)
پس یه راه حل سریع بهم بگین :((


پیوست : =20 ها را از اخر باید حذف کنیم ، ( کاراکتر فاصله هست ، که من برای تست کارهام گذاشتم)
خب مجبور شدم بنویسم :)
مردشون این باگ indy smtp را ببرن
کد:
function ReplaceStringtoUTF8( str:string):string;
var
i,j:integer;
tempstr:string;
  begin
  Tempstr:='=?UTF-8?Q?';

  j:=length(Str);
    for i:=0  to j  do
             begin
اینها حروف الفبای فارسی به ترتیب هستند که چون کپی پیست کردم توی این ادیتور سایت بهم ریختن ، حسش نیست درستشون کنم ، کارتون گیر بود به این سورس خودتون به ترتیب فقط حروف الفبای فارسی را جایگزین کنید.

if Str[i]=  'Ç'   then   TempStr:=TempStr+'=D8=A7';
if Str[i]=  'È'   then   TempStr:=TempStr+'=D8=A8';
if Str[i]=  ''   then   TempStr:=TempStr+'=D9=BE';
if Str[i]=  'Ê'   then   TempStr:=TempStr+'=D8=AA';
if Str[i]=  'Ë'   then   TempStr:=TempStr+'=D8=AB';
if Str[i]=  'Ì'   then   TempStr:=TempStr+'=D8=AC';
if Str[i]=  ''   then   TempStr:=TempStr+'=DA=86';
if Str[i]=  'Í'   then   TempStr:=TempStr+'=D8=AD';
if Str[i]=  'Î'   then   TempStr:=TempStr+'=D8=AE';
if Str[i]=  'Ï'   then   TempStr:=TempStr+'=D8=AF';
if Str[i]=  'Ð'   then   TempStr:=TempStr+'=D8=B0';
if Str[i]=  'Ñ'   then   TempStr:=TempStr+'=D8=B1';
if Str[i]=  'Ò'   then   TempStr:=TempStr+'=D8=B2';
if Str[i]=  'Ž'   then   TempStr:=TempStr+'=DA=98';
if Str[i]=  'Ó'   then   TempStr:=TempStr+'=D8=B3';
if Str[i]=  'Ô'   then   TempStr:=TempStr+'=D8=B4';
if Str[i]=  'Õ'   then   TempStr:=TempStr+'=D8=B5';
if Str[i]=  'Ö'   then   TempStr:=TempStr+'=D8=B6';
if Str[i]=  'Ø'   then   TempStr:=TempStr+'=D8=B7';
if Str[i]=  'Ù'   then   TempStr:=TempStr+'=D8=B8';
if Str[i]=  'Ú'   then   TempStr:=TempStr+'=D8=B9';
if Str[i]=  'Û'   then   TempStr:=TempStr+'=D8=BA';
if Str[i]=  'Ý'   then   TempStr:=TempStr+'=D9=81';
if Str[i]=  'Þ'   then   TempStr:=TempStr+'=D9=82';
if Str[i]=  '˜'   then   TempStr:=TempStr+'=DA=A9';
if Str[i]=  ''   then   TempStr:=TempStr+'=DA=AF';
if Str[i]=  'á'   then   TempStr:=TempStr+'=D9=84';
if Str[i]=  'ã'   then   TempStr:=TempStr+'=D9=85';
if Str[i]=  'ä'   then   TempStr:=TempStr+'=D9=86';
if Str[i]=  'æ'   then   TempStr:=TempStr+'=D9=88';
if Str[i]=  'å'   then   TempStr:=TempStr+'=D9=87';
if Str[i]=  'í'   then   TempStr:=TempStr+'=DB=8C';
IF str[i]=  'í'   THEN   TempStr:=TempStr+'=D9=8A';

if Str[i]=  ' '   then   TempStr:=TempStr+'=20';

if Str[i]=  '0'   then   TempStr:=TempStr+'=30';
if Str[i]=  '1'   then   TempStr:=TempStr+'=31';
if Str[i]=  '2'   then   TempStr:=TempStr+'=32';
if Str[i]=  '3'   then   TempStr:=TempStr+'=33';
if Str[i]=  '4'   then   TempStr:=TempStr+'=34';
if Str[i]=  '5'   then   TempStr:=TempStr+'=35';
if Str[i]=  '6'   then   TempStr:=TempStr+'=36';
if Str[i]=  '7'   then   TempStr:=TempStr+'=37';
if Str[i]=  '8'   then   TempStr:=TempStr+'=38';
if Str[i]=  '9'   then   TempStr:=TempStr+'=39';


if LowerCase(Str[i])=  'a'   then   TempStr:=TempStr+'a';
if LowerCase(Str[i])=  'b'   then   TempStr:=TempStr+'b';
if LowerCase(Str[i])=  'c'   then   TempStr:=TempStr+'c';
if LowerCase(Str[i])=  'd'   then   TempStr:=TempStr+'d';
if LowerCase(Str[i])=  'e'   then   TempStr:=TempStr+'e';
if LowerCase(Str[i])=  'f'   then   TempStr:=TempStr+'f';
if LowerCase(Str[i])=  'g'   then   TempStr:=TempStr+'g';
if LowerCase(Str[i])=  'h'   then   TempStr:=TempStr+'h';
if LowerCase(Str[i])=  'i'   then   TempStr:=TempStr+'i';
if LowerCase(Str[i])=  'j'   then   TempStr:=TempStr+'j';
if LowerCase(Str[i])=  'k'   then   TempStr:=TempStr+'k';
if LowerCase(Str[i])=  'l'   then   TempStr:=TempStr+'l';
if LowerCase(Str[i])=  'm'   then   TempStr:=TempStr+'m';
if LowerCase(Str[i])=  'n'   then   TempStr:=TempStr+'n';
if LowerCase(Str[i])=  'o'   then   TempStr:=TempStr+'o';
if LowerCase(Str[i])=  'p'   then   TempStr:=TempStr+'p';
if LowerCase(Str[i])=  'q'   then   TempStr:=TempStr+'q';
if LowerCase(Str[i])=  'r'   then   TempStr:=TempStr+'r';
if LowerCase(Str[i])=  's'   then   TempStr:=TempStr+'s';
if LowerCase(Str[i])=  't'   then   TempStr:=TempStr+'t';
if LowerCase(Str[i])=  'u'   then   TempStr:=TempStr+'u';
if LowerCase(Str[i])=  'v'   then   TempStr:=TempStr+'v';
if LowerCase(Str[i])=  'w'   then   TempStr:=TempStr+'w';
if LowerCase(Str[i])=  'x'   then   TempStr:=TempStr+'x';
if LowerCase(Str[i])=  'y'   then   TempStr:=TempStr+'y';
if LowerCase(Str[i])=  'z'   then   TempStr:=TempStr+'z';

if LowerCase(Str[i])=  '"'   then   TempStr:=TempStr+'"';
if LowerCase(Str[i])=  '='   then   TempStr:=TempStr+'=';
if LowerCase(Str[i])=  '+'   then   TempStr:=TempStr+'+';
if LowerCase(Str[i])=  '!'   then   TempStr:=TempStr+'!';
if LowerCase(Str[i])=  '@'   then   TempStr:=TempStr+'@';
if LowerCase(Str[i])=  '#'   then   TempStr:=TempStr+'#';
if LowerCase(Str[i])=  '$'   then   TempStr:=TempStr+'$';
if LowerCase(Str[i])=  '%'   then   TempStr:=TempStr+'%';
if LowerCase(Str[i])=  '&'   then   TempStr:=TempStr+'&';
if LowerCase(Str[i])=  '*'   then   TempStr:=TempStr+'*';
if LowerCase(Str[i])=  '('   then   TempStr:=TempStr+'(';
if LowerCase(Str[i])=  ')'   then   TempStr:=TempStr+')';

            end;


tempStr := tempStr +'?=';
Result := tempstr;

  end;
اين باگ نيست کدينگ UTF-8 هست که بايد به Ascii ديکد بشه
توابع آماده هم فکر کنم فراوون باشه, يا شايد تو دلفی امکان اين باشه تا کاراکتر انکدينگ رو (تو يونيت يا فورم) رو روی utf-8 گذاشت
(۲۳-دى-۱۳۸۹, ۰۰:۳۷:۳۹)CRazYFULL نوشته است: [ -> ]اين باگ نيست کدينگ UTF-8 هست که بايد به Ascii ديکد بشه
توابع آماده هم فکر کنم فراوون باشه, يا شايد تو دلفی امکان اين باشه تا کاراکتر انکدينگ رو (تو يونيت يا فورم) رو روی utf-8 گذاشت

باگ یا شاید کمبود امکانات indy هست
دلفی تابع UTF8Encode و UTF8decode را داره ، ولی در مورد سابجکت فارسی کارنکرد ( روی body کار میکنه )

شما از دلفی چند استفاده میکنین؟
از دلفی 2009 به بعد پشتیبانی کامل از unicode شده و این مشکلات وجود نداره