Отправка почты стандартными средствами Delphi 7
Как то потребовалось написать программу для наполнение сайта контентом на вордпресе через почту.
В интернете нашел много разных вариантов отправки, но почему то не все работали как нужно, некоторые вообще не работали.
Данный код делает следующее:
Берем некий текст из мемо1 отправляет его на нужный почтовый адрес.
Полностью листинг.
На форму кидаем Button1, Memo1, IdEncoderMIME1, IdMessage1, IdSMTP1. Это стандартные компоненты Delphi 7.
unit Unit1;
interface
//в uses добавилось все автоматически, ничего руками не прописывал.
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, IdComponent, IdTCPConnection, IdTCPClient,
IdMessageClient, IdSMTP, IdMessage, IdBaseComponent, IdCoder,
IdCoder3to4, IdCoderMIME;
type
TForm1 = class (TForm)
Button1: TButton;
Memo1: TMemo;
IdEncoderMIME1: TIdEncoderMIME;
IdMessage1: TIdMessage;
IdSMTP1: TIdSMTP;
procedure Button1Click (Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
// функция конвертирование текста, в данном случает темы сообщение.
function ConvertToWIN1251 (instr:string):string;
begin
result:='=?'+'Windows-1251'+'?B?'+form1.IdEncoderMIME1.Encode (instr)+'?=';
end;
// сама кнопка
procedure TForm1.Button1Click (Sender: TObject);
begin
IdSMTP1.Host:='smtp.mail.ru'; // адресс почтового сервера (smtp.qip.ru, smtp.rambler.ru и тд.)
IdSMTP1.Port:=25; // порт по которому будет осуществляться подключение обычно 25ый
IdSMTP1.Username:='ящик'; // логин пользователя в формате логин@mail.ru
IdSMTP1.Password:='пароль'; // пароль пользователя для авторизации на свой почтовый ящик
IdSMTP1.AuthenticationType:=atLogin;
//конектимся к своему почтовому ящику.
IdSMTP1.Connect;
Sleep (2000); // здесь я просто сделал задержку, вроде так лучше.
//устанавливаю кодировку письма в 'utf-8'
IdMessage1.CharSet:='utf-8';
//указываем что это текстовая информация
IdMessage1.ContentType:='text/plain';
//переводим текст письма в формат utf-8 (не обязательно, но меня без этого на почту приходили крякозябры)
IdMessage1.Body.Text:=AnsiToUtf8 (Memo1.Lines.Text);
//здесь указываем адрес отправителя сообщения, он должен быть обязательно такой же как и адрес почтового ящика с которого вы отправляете сообщение.
IdMessage1.From.Text := ‘логин@mail.ru’;
//адрес почтового ящика на который вам нужно отправить сообщение
IdMessage1.Recipients.EMailAddresses := ‘логин@qip.ru’;
//конвертируем тему письма в формат WIN1251 что бы тоже была читабельной.
IdMessage1.Subject:=ConvertToWIN1251 ('тема письма'); //Тема сообщения
//отправляем сообщение
IdSMTP1.Send (IdMessage1);
//отключаемся.
IdSMTP1.Disconnect;
end;
end.
Данный код 100% работоспособен!!!!!!