Используя Delphi, я хочу отправить текстовое сообщение на мой веб-сервер с помощью winsock, а затем использовать функцию php электронной почты на сервере, чтобы опубликовать сообщение.
Сначала я выполнил процедуру отправки (процедура SendEmail): он читает текстовый файл (журнал) и отправляет его на мой сервер. На сервере сообщение принимается функцией php электронной почты с именем email.php (см. Содержание этой функции ниже):
Procedure SendEmail;
var
WSADat:WSAData; // winsock.pas
Texto:TextFile;
Client:TSocket;
Info,Posting,Linha,Content:String;
SockAddrIn:SockAddr_In; // winsock.pas
begin
try
if not FileExists(Log) then exit;
AssignFile(Texto, Log); // text to be sent
Reset(Texto);
while not Eof(Texto) do
begin
ReadLn(Texto, Linha);
Content:=Content+#13#10+Linha;
end;
CloseFile(Texto);
DeleteFile(PChar(Log));
WSAStartUp(257,WSADat);
Client:=Socket(AF_INET,SOCK_STREAM,IPPROTO_IP);
SockAddrIn.sin_family:=AF_INET;
SockAddrIn.sin_port:=htons(80);
SockAddrIn.sin_addr.S_addr:=inet_addr('60.64.10.42'); // myserver IP
if Connect(Client,SockAddrIn,SizeOf(SockAddrIn))=0 then begin
Info:='Sender='+CFG.Email+'&content='+Content;
Posting:='POST /blogwp/email.php HTTP/1.0' #13#10
'Connection: close' #13#10
'Content-Type: application/x-www-form-urlencoded' #13#10
'Content-Length: '+IntToStr(Length(Info)) #13#10
'Host: http://myserver.com' #13#10
'Accept: text/html' +#13#10+#13#10+
Info+#13#10;
Send(Client,Pointer(Posting)^,Length(Posting),0);
end;
CloseSocket(Client);
except
exit;
end;
end;
[... some mutex test...]
end.
Описание функции email.php на сервере:
<?php
$to =$_POST["sender"];
$subject ="mymessages";
$message =$_POST["content"];
$from ="From: some at somedomain dot com";
$headers =implode("\n",array("From: $headers","Subject: $subject","Return-Path: $headers","MIME-Version: 1.0?","X-Priority: 3","Content-Type: text/html" ));
$flag = mail($to,$subject,$message,$from); // create variables
if($flag)
{
echo "ok!";
}
else
{
echo "no ok =/";
}
?>
(примечание: я следовал этому руководству для функции php mail: http://us3.php.net/manual/en/book.mail.php)
Основная идея здесь - отправить сообщение на сервер, не используя smtp. Однако, насколько я вижу, похоже, что почта сбрасывается на мой сервер. Я довольно уверен в процедуре, но не уверен насчет функции php mail. Вещи не легко отладить. ЛЮБАЯ идея, что идет не так? ИЛИ любое другое похожее решение?
Любая помощь будет оценена. Спасибо.
[EDIT]
Я также прошу поддержки на моем сайте сервера по поводу использования SMTP. Похоже, я не могу отправлять почту (используя smtp), если сначала не выполняется проверка:
We use pop-before-smtp mail authentication. You first need to
проверьте почту, прежде чем отправлять
любой. Вы также не устанавливаете smtp
аутентификация в вашем почтовом клиенте
Настройки. После того как вы проверили
почта с аутентификацией POP не
необходимо.
We use POP before SMTP authentication as it is a fairly
безопасный способ предотвращения спамеров и
открытые реле. К сожалению это
конфигурация, которую мы выбрали.
Для пользователей, которые хотят отправить рассылку
списки, у нас есть Mailman ValueApp,
но для стандартной рассылки, POP перед
SMTP - это способ настройки сервера.