> さらに調べてみました。
> 送ってもいないのに勝手に帰ってくるレスポンスコードですが、
> 他のウェルノンポートについても調べてみましたが、やはり
> ポート25のみ、挙動がおかしいようです。
> というのもローカルの25番ポートに前記の自作ツールでサーバを起動し、
> SMTPのプロトコルに従い、リクエストとレスポンスを送受信すると、
> 送っていないはずのレスポンスが返ってきたり、QUITにレスポンスすると
> コネクションが切れたりします。
> netstat -a で25番に自作ツール以外何も動いていないのは確認しました。
> Windowsの仕様かと思ったんですが、今までこんなことありませんでした。
> 常駐ソフトの可能性もありますが、FW(ZoneAlarm)は終了させてあります。
>
> この辺の仕様に詳しい方解説お願いします。
> OSはWinXP HEです。98SEでも試しましたが問題はおきませんでした。
返信が遅れてすみません。ちょっとプログラムの改造にてこずっていたので。
...っと思ったら作ってもなぜかソフトが落ちます。
以下がソースです。
コード:
FillMemory(buffer, 256, 0)
recv(s, buffer, 256, 0)
SetDlgItemText(hSendMail, Static_Recv, buffer)
lstrcpy(StrPtr(Recvtemp), buffer)
wsprintf(buffer, Ex"HELO %s\r\n", szServerName) 'HELOコマンドを送信
send(s, buffer, lstrlen(buffer), 0)
FillMemory(buffer, 256, 0)
recv(s, buffer, 256, 0)
SetDlgItemText(hSendMail, Static_Recv, buffer)
lstrcat(StrPtr(Recvtemp), buffer)
wsprintf(buffer, Ex"MAIL FROM : <%s>\r\n", szForm) 'MAIL FROMコマンドを送信
send(s, buffer, lstrlen(buffer), 0)
FillMemory(buffer, 256, 0)
recv(s, buffer, 256, 0)
lstrcat(StrPtr(Recvtemp), buffer)
SetDlgItemText(hSendMail, Static_Recv, buffer)
debug
wsprintf(buffer, Ex"RCPT TO : <%s>\r\n", szTo) 'RCPT TOコマンドを送信
send(s, buffer, lstrlen(buffer), 0)
FillMemory(buffer, 256, 0)
recv(s, buffer, 256, 0)
lstrcat(StrPtr(Recvtemp), buffer)
SetDlgItemText(hSendMail, Static_Recv, buffer)
lstrcpy(buffer, Ex"DATA\r\n") 'DATAコマンドを送信
send(s, buffer, lstrlen(buffer), 0)
FillMemory(buffer, 256, 0)
recv(s, buffer, 256, 0)
lstrcat(StrPtr(Recvtemp), buffer)
SetDlgItemText(hSendMail, Static_Recv, buffer)
lstrcpy(buffer, Ex"X-Mailer: Test_Mailer\r\n") 'ヘッダ部分を送信
send(s, buffer, lstrlen(buffer), 0)
wsprintf(buffer, Ex"Subject: %s \r\n", szSubject) '件名を送信
send(s, buffer, lstrlen(buffer), 0)
lstrcpy(buffer, Ex"\r\n")
send(s, buffer, lstrlen(buffer), 0)
'メール本文を送信
i=0
i2=0
Do
If (TextBuffer=13 and TextBuffer[i+1]=10) or TextBuffer=0 Then
'改行
temporary[i2]=0
lstrcat(temporary, Ex"\r\n")
'送信
send(s, temporary, lstrlen(temporary), 0)
If TextBuffer=0 Then Exit Do
i=i+2
i2=0
Continue
End If
temporary[i2]=TextBuffer
i=i+1
i2=i2+1
Loop
lstrcpy(buffer, Ex".\r\n")
send(s, buffer, lstrlen(buffer), 0)
FillMemory(buffer, 256, 0)
recv(s, buffer, 256, 0)
lstrcat(StrPtr(Recvtemp), buffer)
SetDlgItemText(hSendMail, Static_Recv, buffer)
lstrcpy(buffer, Ex"QUIT\r\n") 'QUITコマンドを送信
send(s, buffer, lstrlen(buffer), 0)
FillMemory(buffer, 256, 0)
recv(s, buffer, 256, 0)
lstrcat(StrPtr(Recvtemp), buffer)
SetDlgItemText(hSendMail, Static_Recv, buffer)
'ソケットへの接続を閉じる
shutdown(s, SD_BOTH)
closesocket(s)
'WinSockが使用したメモリを開放
WSACleanup()
SetDlgItemText(hSendMail, Static_Recv, "送信が完了しました")
SetDlgItemText(hSendMail, RecvLog, Recvtemp)
なぜか途中で落ちます。デバッグするとデバッガも落ちます。そしてProjectEditorも落ちます。
なんか出来ていた時のをみると「HEAP...」とか書いてあります。なぜかString型変数の開放に失敗するようです。