|
#1
|
|||
|
|||
сообщения SendTo
Не могу отправить сообщение на почтовый ящик, помогите плииз:
Код:
var sEmail:String; begin sEmail:='mailto:'+sendEmail+'?subject='+sendSubject+'&body='+sendText; ShellExecute(Handle,'open',PChar(sEmail),nil,nil,SW_SHOWNORMAL); end; sendEmail - имя ящика, строка типа 'zzzzz@mail.ru'; sendSubject - строка темы: 'поздравление'; sendText - текст сообщения (текст короткий); При запуске мне пишут: "Не удалось из-за неправильной установки клиента почты по умолчанию". Что-то не хватает наверное... Последний раз редактировалось Admin, 03.10.2018 в 19:57. |
#2
|
|||
|
|||
Конкретно, не установленна программа для обработки протокола mailto:
Поставь почтового клиента (mail live вроде теперь называется, раньше был outlook express). Нынче он по умолчанию не идет установленным (с Vista вроде). Ну или пиши свой посылалщик... |
#3
|
|||
|
|||
Админ, а в чём неправильность оформления??
|
#4
|
|||
|
|||
Imikle, мне надо чтобы моя прога отправила на мой мейл письмо с чужого компа. Есть код другой, но там пишут, что ошибка по адресу... Код не привожу, а то снова забанят как в прошлый раз. А у меня проблемы с инетом. Как код подключить? Тут тока ссылки и тэги...
|
#5
|
|||
|
|||
Код оформляется через теги code (в кв. скобках). Пиши через расширенный режим - там кнопки есть.
По поводу самого вопроса. По сути, твой код правильный. НО! Все дело в том, что для использования такого метода нужно что бы на компе (том, с которого будет отправляться сообшение) стоял и был настроен соответсвующий почтовый клиент. А, начиная с Висты, такой клиент по умолчанию больше не ставится. Если очень так нужно, то можно: 1. На своем сайте сделать скрытую страничку с формой, которую заполнить из программы и субмитнуть. Ну а страничка уже пошлет тебе письмо с сервера. 2. Разобраться как работать с обществеными почтовыми серверами (gmail, mail.ru, etc) и использовать их. 3. Поднять свой smtp сервер где-то и посылать себе письма через него (используя Indy компоненты например - IdSmtpClient) 4. Написать свой smtp-резолвер и класть письмо напрямую в свой почтовый ящик. Короче, вариантов реализации достаточно много. |
Этот пользователь сказал Спасибо lmikle за это полезное сообщение: | ||
Gakuro (19.10.2018)
|
#6
|
|||
|
|||
новый код
Imikle, подскажите пожауста, в чём ошибка.
вот код, но при запуске выдаёт ошибку по адресу 00..08 (ящики mail.ru существуют): // наверно так (тег CODE): Код:
procedure TForm1.MyWebSendToEmail(sendText:String;{текст сообщения} sendSubject:String='Hi'; {тема сообщения} sendEmail:String='xxx@mail.ru'); {имя ящика} var aMsg:TIdMessage; begin // соединяемся с сервером: IdSMTP1.Port:=25; {используем 25й порт для соединения с SMTP сервером} IdSMTP1.Host:='smtp.mail.ru'; {URL сервера mail.ru} IdSMTP1.AuthenticationType:=atNone; {без авторизации на сервере} IdSMTP1.Connect; //(5000); {время ожидания ответа от сервера (милисекунды)} // для исправления бага на русский шрифт меняем таблицу (UTF8Encode): aMsg.CharSet:='UTF-8'; {русифицируем} aMsg.Recipients.EMailAddresses:=sendEmail; {имя ящика, входной параметр} aMsg.Subject:=UTF8Encode(sendSubject); {тема сообщения, входной параметр} aMsg.Body.Text:=UTF8Encode(sendText); {текст сообщения, входной параметр} aMsg.Date:=Now; {дата отправки письма} aMsg.From.Address:='xxx1@mail.ru'; {Email отправителя} aMsg.From.Name:='User'; {имя отправителя} if IdSMTP1.Connected then {если соединились:} begin IdSMTP1.Send(aMsg); {отправляем письмо} IdSMTP1.Disconnect; {разрываем соединение с сервером} end; end; |
#7
|
|||
|
|||
P.S к процедуре:
1) если использую var aMsg:TIdMessage, то: "Access violation at address 0041BC2F in module 'MyProject.exe'. Read of address 00000008." 2) если использую IdMessage1 с вкладки IndyMisc, то: "SMTP is available only with SSL or TLS connection enabled." не знаю чё делать.... |
#8
|
|||
|
|||
Одна ошибка не отменяет другую.
1. А кто будет за тебя создавать aMsg??? Код:
var aMsg : TIdMessage; begin ... aMsg := TIdMessage.Create(Nil); Try ... Finally aMsg.Free; End; end; 2. Тебе сервер говорит, что он принимает подключение только с использованием SSL. Я где-то тут недавно постил пример как использовать SSL с TIdHttp. Я так понимаю, что с TIdSmtp примерно так же. Качаем и кладем рядом с exe пару библиотек, добавляем в код SSLIOHandler (как-то так) и все должно заработать. |
#9
|
|||
|
|||
SentTo
Imikle, aMsg:=TIdMessage.Create(Nil); да, бывает, спасибо!!!
чё-то твой пост о SSL с TIdHttp где-то закопался. Есть куча постов IdSMTP, IdPOP3, MAPI, но всё-равно ничё не получается, пишет: "С запрошенным действием не связана программа электронной почты. Установите программу электронной почты или, если она уже установлена, создайте связь в панели управления Программы по умолчанию". Мне надо чтоб моя программа с чужого компа отправила письмо на мой майл. При этом я не знаю, что на том компе (майл адреса у юзера тоже может не быть). Я в этом деле ламер, помогите пожалуста!!! |
#10
|
|||
|
|||
Вот код для http:
Код:
function TMonitorItem.ReadInternetPage(AUrl : String) : String; var IdHTTP : TIdHTTP; Id_HandlerSocket : TIdSSLIOHandlerSocketOpenSSL; begin IdHTTP := TIdHTTP.Create(Nil); Id_HandlerSocket := TIdSSLIOHandlerSocketOpenSSL.Create(IdHTTP); Try IdHTTP.Request.BasicAuthentication := False; IdHTTP.Request.UserAgent := 'Mozilla/5.0 (Windows NT 6.1; WOW64; rv:12.0) Gecko/20100101 Firefox/12.0'; Id_HandlerSocket.SSLOptions.Mode := sslmClient; Id_HandlerSocket.SSLOptions.Method := sslvSSLv23; IdHTTP.IOHandler := Id_HandlerSocket; Result := IdHTTP.Get(FUrl); Finally Id_HandlerSocket.Free; IdHTTP.Free; End; end; вообще, обращения к почтовому клиенту при использование Indy быть не должно... |
#11
|
|||
|
|||
Вот тут есть какой-то код для gmail. Но я его не проверял.
https://stackoverflow.com/questions/...indy-using-tls |