Delphi kullanarak, ben winsock kullanarak benim web sunucusuna bir kısa mesaj göndermek ve ardından mesajı göndermek için sunucu üzerinde bir e-posta php işlevi kullanmak istiyorum.
Öncelikle ben gönderme prosedürü (Prosedür SendEmail) yaptım: Bir metin dosyasını okur (log) ve benim sunucuya POST. Sunucuda, mesaj (aşağıda bu işlevin içeriğini görmek) email.php adında aa email php işlevi tarafından alınan:
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.
Sunucuda email.php işlevinin açıklaması:
<?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 =/";
}
?>
(Not: ben php mail fonksiyonu için bu kılavuzu takip adres: http://us3.php.net/manual/en/book.mail.php)
Burada genel bir fikir smtp kullanarak değil sunucuya mesaj göndermektir. Posta benim sunucuda bırakılır gibi Ancak kadarıyla ben gördüğünüz gibi, görünüyor. Ben güzel prosedürün güvenen, ancak php mail fonksiyonu hakkında emin değilim. Şey ayıklamak kolay değildir. Ne yanlış HERHANGİ fikir oluyor? OR diğer herhangi benzer bir çözüm görünüyor?
Herhangi bir yardım takdir edilecektir. Teşekkürler.
[EDIT] I have also ask support at my server site concerning use of smtp. Looks like i cannot send any mail (using smtp) if no check is done first:
We use pop-before-smtp mail authentication. You first need to
check the mail before you can send any. You also do not set smtp authentication in your e-mail client settings. Once you have checked the mail with POP authentication is not needed.
We use POP before SMTP authentication as it is a fairly
secure way to prevent spammers and open relays. Unfortunately, this is the configuration that we have chosen. For users who wish to send out mailing lists, we have the Mailman ValueApp, but for standard emailing, POP before SMTP is how the server is setup.