Delphi ile gmail üstünden email gönderme
Forum kuralları
Forum kurallarını okuyup, uyunuz!
Forum kurallarını okuyup, uyunuz!
Re: Delphi ile gmail üstünden email gönderme
Merhaba, mevcut kodlarınızı ve karşılaştığınız hatayı paylaşabilir misiniz?
Re: Delphi ile gmail üstünden email gönderme
Birkaç eksiğiniz var. Öncelikle IdSMTP.Authenticate() kullanmıyorsunuz. Ayrıca gördüğüm kadarıyla şifreli iletişim kurmuyorsunuz ki Gmail yıllardır şifreli iletişim talep eder.
Kullandığınız şifre Gmail üzerinden alınan uygulama şifresi mi? Yoksa gerçek kullanıcı şifresi mi kullanıyorsunuz? Gmail uygulama şifresi email gönderileri için gerekli denilebilir. Bu şifre de uzun zamandır gmail tarafından kullanılan bir uygulamadır.
https://support.google.com/accounts/answer/185833?hl=en
Yukarıdaki bilgiyi de verdikten sonra çalışır bir kod paylaşacağım.
Kullandığınız şifre Gmail üzerinden alınan uygulama şifresi mi? Yoksa gerçek kullanıcı şifresi mi kullanıyorsunuz? Gmail uygulama şifresi email gönderileri için gerekli denilebilir. Bu şifre de uzun zamandır gmail tarafından kullanılan bir uygulamadır.
https://support.google.com/accounts/answer/185833?hl=en
Yukarıdaki bilgiyi de verdikten sonra çalışır bir kod paylaşacağım.
Re: Delphi ile gmail üstünden email gönderme
Aşağıdaki gibi bir fonksiyon kullanarak genel olarak herhangi bir SMTP üzerinden e-mail gönderebilirsiniz. Bazı SMTP sunucuları belirli TLS sürümü veya Implicit, Explicit TLS veya SSLv2, SSLv3 gibi farklı bağlantı şekillerini zorunlu tutabilirler. O tür sunucular için fonksiyonu biraz daha geliştirmek gerekir.
Fonksiyon OpenSSL kütüphanesine (libeay32.dll, ssleay32.dll) ihtiyaç duyar. Bu dosyaları ekte bulabilirsiniz.
Kullanımı aşağıdaki gibi olacaktır:
Fonksiyon OpenSSL kütüphanesine (libeay32.dll, ssleay32.dll) ihtiyaç duyar. Bu dosyaları ekte bulabilirsiniz.
Kod: Tümünü seç
uses
IdBaseComponent,
IdComponent,
IdTCPConnection,
IdTCPClient,
IdExplicitTLSClientServerBase,
IdMessageBuilder,
IdMessageClient,
IdEmailAddress,
IdSMTPBase,
IdSMTP,
IdSSLOpenSSL,
IdMessage,
IdAttachment,
IdAttachmentFile;
function SendEmail(const Subject, FromName, FromEmail, RecipientName, RecipientEmail, MessageBody, AttachmentFile, SmtpServer, SmtpUsername, SmtpPassword: string; out ErrorMessage: string; const SmtpPort: Word = 587): Boolean;
var
FIdMessage: TIdMessage;
FIdAttachment: TIdAttachment;
FIdSSLIOHandlerSocket: TIdSSLIOHandlerSocketOpenSSL;
FIdSMTP: TIdSMTP;
FIdMailAddressItem: TIdEMailAddressItem;
begin
FIdMessage := TIdMessage.Create(nil);
try
FIdMessage.MessageParts.Clear();
FIdMessage.Subject := Subject;
FIdMessage.From.Name := FromName;
FIdMessage.From.Address := FromEmail;
FIdMailaddressItem := FIdMessage.Recipients.Add();
FIdMailAddressItem.Name := RecipientName;
FIdMailAddressItem.Address := RecipientEmail;
FIdMessage.Body.Text := MessageBody;
if FileExists(AttachmentFile) then
begin
FIdMessage.CharSet := 'utf-8';
FIdMessage.AttachmentEncoding := 'MIME';
FIdMessage.Encoding := meMIME;
FIdMessage.NoEncode := False;
FIdMessage.NoDecode := False;
FIdMessage.IsEncoded := True;
FIdAttachment := TIdAttachmentFile.Create(FIdMessage.MessageParts, AttachmentFile);
end
else
begin
FIdMessage.ContentType := 'text/plain';
FIdMessage.CharSet := 'utf-8';
end;
FIdSMTP := TIdSMTP.Create(nil);
try
FIdSSLIOHandlerSocket := TIdSSLIOHandlerSocketOpenSSL.Create(FIdSMTP);
try
FIdSSLIOHandlerSocket.SSLOptions.Method := sslvTLSv1_2;
FIdSSLIOHandlerSocket.SSLOptions.SSLVersions := [sslvTLSv1_2];
FIdSSLIOHandlerSocket.SSLOptions.Mode := sslmUnassigned;
FIdSSLIOHandlerSocket.PassThrough := False;
FIdSMTP.IOHandler := FIdSSLIOHandlerSocket;
FIdSMTP.UseTLS := utUseRequireTLS;
FIdSMTP.AuthType := satDefault;
FIdSMTP.Host := SmtpServer;
FIdSMTP.Port := SmtpPort;
FIdSMTP.Username := SmtpUsername;
FIdSMTP.Password := SmtpPassword;
// Connect
try
FIdSMTP.Connect();
except
on E: Exception do
begin
ErrorMessage := E.Message;
Exit(False);
end;
end;
// Authenticate
try
FIdSMTP.Authenticate();
except
on E: Exception do
begin
ErrorMessage := E.Message;
Exit(False);
end;
end;
// Send the e-mail
try
FIdSMTP.Send(FIdMessage);
except
on E: Exception do
begin
ErrorMessage := E.Message;
Exit(False);
end;
end;
// Disconnect
try
if FIdSMTP.Connected() then FIdSMTP.Disconnect();
except
on E: Exception do
begin
ErrorMessage := E.Message;
// No need to exit as message already delivered
end;
end;
finally
FIdSSLIOHandlerSocket.Free();
end;
finally
FIdSMTP.Free();
end;
finally
FIdMessage.Free();
end;
Result := True;
end;
Kod: Tümünü seç
procedure TForm1.Button1Click(Sender: TObject);
var
Error: string;
Response: Boolean;
begin
Response := SendEmail('test mesajı',
'Ali',
'ali@veli.com', // gmail farklı domain adı için hata vermez. otomatik gmail.com yapar
'Hasan',
'hasan@abc.com',
'Delphi e-mail deneme mesajıdır. Silebilirsin.',
EmptyStr,
'smtp.gmail.com',
'abc@gmail.com',
'<gmail uygulama şifresi>',
Error,
587);
if not Response then
begin
ShowMessage('E-mail gönderilemedi. Hata:' + sLineBreak + Error);
end
else
begin
ShowMessage('Email gönderildi');
end;
end;
- Dosya ekleri
-
- openssl_dll.7z
- (472.93 KiB) 194 kere indirildi