登録日時: 2006年8月21日(月) 14:26 記事: 104
お住まい: 兵庫県
|
お久しぶりです。
自作メーラーを作ってるんですが、
リストビューに表示させているアドレス取得
↓
メール送信
でいいんですが、
ためしに自分に送ってみると、
送信先のアドレスがおかしいことに気がつきました。
OutlookExpressでいうあて先部分に
" undisclosed-recipients:"
という意味不明な文字が・・・
これってプログラムミスなのかサーバー仕様なのかわかりません。
サーバーのほうはとりあえず調べてみたのですが
特に何の変哲もないサーバーでした・・・
追記:サーバーはビッグローブです
ということで、プログラムミスだと思うんですが、
どこが違うのか・・・
教えてください・・・
ぁ若干メーラーの部分はいってるので
気にしないでください笑
メール送信部分 [ここをクリックすると内容が表示されます] [ここをクリックすると非表示にします]コード: Function SendMailThread(szTo As BytePtr) As DWord
Dim TextBuffer As String 'テキストバッファの格納用
Dim length As Long 'テキストの長さ
Dim temporary As String '送信時のテキスト一時保存用
Dim buffer[255] As Byte
Dim i As Long, i2 As Long
'「送信」「閉じる」ボタンを無効にする
EnableWindow(GetDlgItem(hSend,CommandButton1),FALSE)
EnableWindow(GetDlgItem(hSend,CommandButton2),FALSE)
'各エディットボックスの内容を取得する
Dim szServerName[255] As Byte 'サーバー名
Dim szFrom[255] As Byte '送信元アドレス
Dim szSubject[255] As Byte '件名
Dim q As Long
Dim buf[MAX_PATH-1] As Byte
Dim buf1 As String
Dim buf2 As String
Dim i3 As Long
GetModuleFileName(0,buf,256)
i3=lstrlen(buf)-1
Do
If buf[i3]=Asc("\") Then
buf[i3]=0
Exit Do
End If
i3=i3-1
If i3<0 Then Exit Do
Loop
buf1=MakeStr(buf)
buf2=buf1+"\Option\opt.ini"
GetPrivateProfileString("User","SMTP",0,szServerName,256,buf2)
GetPrivateProfileString("User","Address",0,szFrom,256,buf2)
If szServerName(0)=0 or szFrom(0)=0 Then
MessageBox(hSend,"設定が不十分です。設定しなおしてください。","警告",MB_OK or MB_ICONWARNING)
error=1
EnableWindow(GetDlgItem(hSend,CommandButton1),TRUE)
EnableWindow(GetDlgItem(hSend,CommandButton2),TRUE)
ExitFunction
End If
GetWindowText(GetDlgItem(hSend,EditBox3),szSubject,256)
If szSubject(0)=0 Then
q=MessageBox(hSend,Ex"タイトルを入力してください。\r\n設定しない場合は、\qNoTitle\qで送信されます。\r\nよろしいですか?",_
"確認",MB_YESNO or MB_ICONQUESTION)
If q = IDYES Then
SetDlgItemText(hSend,EditBox3,"NoTitle")
GetWindowText(GetDlgItem(hSend,EditBox3),szSubject,256)
ElseIf q = IDNO Then
error=1
EnableWindow(GetDlgItem(hSend,CommandButton1),TRUE)
EnableWindow(GetDlgItem(hSend,CommandButton2),TRUE)
ExitFunction
End If
End If
'テキスト データを格納するためのバッファ領域を確保
Dim hEdit As DWord
hEdit=GetDlgItem(hMainWnd,EditBox1)
length=GetWindowTextLength(hEdit)
TextBuffer=ZeroString(length+1)
temporary=ZeroString(length+3)
'テキスト バッファを取得
GetWindowText(hEdit, TextBuffer, length+1)
'WinSock Ver1.1の初期化
Dim wsaData As WSADATA 'ソケットの初期化情報
WSAStartup(MAKEWORD(1,1),wsaData)
'サーバーを探す
Dim lpHost As *HOSTENT 'ホスト情報
lpHost=gethostbyname(szServerName)
If lpHost=0 Then
wsprintf(buffer,"%sが見つかりません",szServerName)
AddEditBoxText(hSend,EditBox4,Ex"\r\n")
AddEditBoxText(hSend,EditBox4,buffer)
MessageBox(hSend,buffer,"警告",MB_OK)
error=1
'「送信」「閉じる」ボタンを有効にする
EnableWindow(GetDlgItem(hSend,CommandButton1),TRUE)
EnableWindow(GetDlgItem(hSend,CommandButton2),TRUE)
Exit Function
End If
'ソケットをオープン
Dim s As DWord 'ソケット
s=socket(AF_INET, SOCK_STREAM, 0)
If s=0 Then
AddEditBoxText(hSend,EditBox4,Ex"\r\n")
AddEditBoxText(hSend,EditBox4,"ソケットのオープンに失敗")
MessageBox(hSend,"ソケットのオープンに失敗","警告",MB_OK or MB_ICONWARNING)
error=1
'「送信」「閉じる」ボタンを有効にする
EnableWindow(GetDlgItem(hSend,CommandButton1),TRUE)
EnableWindow(GetDlgItem(hSend,CommandButton2),TRUE)
Exit Function
End If
'メール用のポート番号を取得
Dim lpServ As *SERVENT 'サービス情報
Dim sockaddress As SOCKADDR_IN 'アドレス情報
lpServ = getservbyname("mail", NULL)
If lpServ=0 Then
'デフォルトのポート番号を使用
sockaddress.sin_port=htons(IPPORT_SMTP)
Else
sockaddress.sin_port=lpServ->s_port
End If
sockaddress.sin_family=AF_INET
sockaddress.sin_addr=GetDWord(GetDWord(lpHost->h_addr_list))
'サーバーに接続
If connect(s,sockaddress,Len(sockaddress)) Then
AddEditBoxText(hSend,EditBox4,Ex"\r\n")
AddEditBoxText(hSend,EditBox4,"サーバーへの接続に失敗")
MessageBox(hSend,"サーバーへの接続に失敗","警告",MB_OK or MB_ICONWARNING)
error=1
'「送信」「閉じる」ボタンを有効にする
EnableWindow(GetDlgItem(hSend,CommandButton1),TRUE)
EnableWindow(GetDlgItem(hSend,CommandButton2),TRUE)
Exit Function
End If
FillMemory(buffer,256,0)
recv(s, buffer, 256, 0)
wsprintf(buffer,Ex"HELO %s\r\n",szServerName) 'HELOコマンドを送信
send(s, buffer, lstrlen(buffer), 0)
FillMemory(buffer,256,0)
recv(s, buffer, 256, 0)
AddEditBoxText(hSend,EditBox4,Ex"\r\n")
AddEditBoxText(hSend,EditBox4,buffer)
wsprintf(buffer, Ex"MAIL FROM : <%s>\r\n", szFrom) 'MAIL FROMコマンドを送信
send(s, buffer, lstrlen(buffer), 0)
FillMemory(buffer,256,0)
recv(s, buffer, 256, 0)
AddEditBoxText(hSend,EditBox4,Ex"\r\n")
AddEditBoxText(hSend,EditBox4,buffer)
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)
AddEditBoxText(hSend,EditBox4,Ex"\r\n")
AddEditBoxText(hSend,EditBox4,buffer)
lstrcpy(buffer, Ex"DATA\r\n") 'DATAコマンドを送信
send(s, buffer, lstrlen(buffer), 0)
FillMemory(buffer,256,0)
recv(s, buffer, 256, 0)
AddEditBoxText(hSend,EditBox4,Ex"\r\n")
AddEditBoxText(hSend,EditBox4,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)
lstrcpy(buffer, Ex"QUIT\r\n") 'QUITコマンドを送信
send(s, buffer, lstrlen(buffer), 0)
FillMemory(buffer,256,0)
recv(s, buffer, 256, 0)
'ソケットへの接続を閉じる
shutdown(s,SD_BOTH)
closesocket(s)
'WinSockが使用したメモリを解放
WSACleanup()
AddEditBoxText(hSend,EditBox4,Ex"\r\n")
AddEditBoxText(hSend,EditBox4,"送信完了!")
'「送信」「閉じる」ボタンを有効にする
EnableWindow(GetDlgItem(hSend,CommandButton1),TRUE)
EnableWindow(GetDlgItem(hSend,CommandButton2),TRUE)
End Function ボタンを押したときの操作 [ここをクリックすると内容が表示されます] [ここをクリックすると非表示にします]コード: Sub Send_CommandButton1_Click()
Dim d[255] As Byte
Dim len As Long
Dim i As Long
Dim ad As String
Dim adB As BytePtr
Dim buffer[255] As Byte
error=0
fk=1
debug
For i=0 To aNum-1
If error=1 Then
Exit For
End If
ad=GetListItem(GetDlgItem(hSend,ListView1),i,1)
adB=StrPtr(ad)
SendMailThread(adB)
If error=1 Then
wsprintf(buffer,"メールの%i通めに送信失敗しました。",fk)
Exit For
End If
wsprintf(buffer,"%i通めのメールを送信しました。",fk)
fk=fk+1
Next i
End Sub
_________________ ===============================
MyHomePage;; raiden.no.land.to/
===============================
|
|