用winsock,通过SMTP命令集进行邮件发送。
解决方案 »
- 如何自动调整MSHFlexGrid行高
- 怎样实现向某个窗体发送Ctrl+C
- 如何用代码创建一个文件呢?
- VB6.0+SQL2000报表中显示图片问题!
- 刚有人帮badboy168 (坏小子) 解决了加滚动条的问题,有谁知道给OLE加吗?
- 我在98下做的安装程序,安装到xp下,怎么vb里的datareport报表出不来??
- 我想问一个关于VSS的问题。可以加分,很急。
- 注册表的一个棘手的问题,win2000下的RegCreateKeyEx ?????????!!!!
- 关于记事本的关闭问题
- 难题:如何知道 A: 盘是否准备好且不能发出声音?
- 有一个很基础的问题,但是我怎么也不会
- 最菜最菜的问题,如何连接SQL数据库?能提供个教程网址最好了。
但是被它拒绝了,不知道为什么呢?
我看了一些资料说,很多smtp服务器,现在都不为非会员做转发email的,但是我就觉得奇怪,那么我的outlook它发信,我设置的也是smtp.citiz.net,它怎么能发送成功呢?
这是什么问题,2。我曾经看到过一个程序,它只需要你填写收信人的地址,不用任何设置,就可以发信了,这是怎么做到的
Private Enum SMTP_State
MAIL_CONNECT
MAIL_HELO
MAIL_from
MAIL_RCPTTO
MAIL_DATA
MAIL_DOT
MAIL_QUIT
MAIL_USER
MAIL_PASS
mail_login
End Enum
Private m_State As SMTP_State
Private m_strEncodedFiles As String
Private Function Base64_Encode(strSource) As String 'base64シモテワヒ羚ィ
Const BASE64_TABLE As String = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/"
Dim strTempLine As String
Dim j As Integer
For j = 1 To (Len(strSource) - Len(strSource) Mod 3) Step 3
strTempLine = strTempLine + Mid(BASE64_TABLE, (Asc(Mid(strSource, j, 1)) \ 4) + 1, 1)
strTempLine = strTempLine + Mid(BASE64_TABLE, ((Asc(Mid(strSource, j, 1)) Mod 4) * 16 _
+ Asc(Mid(strSource, j + 1, 1)) \ 16) + 1, 1)
strTempLine = strTempLine + Mid(BASE64_TABLE, ((Asc(Mid(strSource, j + 1, 1)) Mod 16) * 4 _
+ Asc(Mid(strSource, j + 2, 1)) \ 64) + 1, 1)
strTempLine = strTempLine + Mid(BASE64_TABLE, (Asc(Mid(strSource, j + 2, 1)) Mod 64) + 1, 1)
Next j
If Not (Len(strSource) Mod 3) = 0 Then
If (Len(strSource) Mod 3) = 2 Then
strTempLine = strTempLine + Mid(BASE64_TABLE, (Asc(Mid(strSource, j, 1)) \ 4) + 1, 1)
strTempLine = strTempLine + Mid(BASE64_TABLE, (Asc(Mid(strSource, j, 1)) Mod 4) * 16 _
+ Asc(Mid(strSource, j + 1, 1)) \ 16 + 1, 1)
strTempLine = strTempLine + Mid(BASE64_TABLE, (Asc(Mid(strSource, j + 1, 1)) Mod 16) * 4 + 1, 1)
strTempLine = strTempLine & "="
ElseIf (Len(strSource) Mod 3) = 1 Then
strTempLine = strTempLine + Mid(BASE64_TABLE, Asc(Mid(strSource, j, 1)) \ 4 + 1, 1)
strTempLine = strTempLine + Mid(BASE64_TABLE, (Asc(Mid(strSource, j, 1)) Mod 4) * 16 + 1, 1)
strTempLine = strTempLine & "=="
End If
End If
Base64_Encode = strTempLine
End Function
Private Sub cmdExit_Click()
Unload Me
End Sub
Private Sub CmdSend1_Click()
Winsock1.Close
Winsock1.LocalPort = 0
strserver = txtserver
ColonPos = InStr(strserver, ":")
If ColonPos = 0 Then
Winsock1.Connect strserver, 25
Else
lngPort = CLng(Right$(strserver, Len(strserver) - ColonPos))
strserver = Left$(strserver, ColonPos - 1)
Winsock1.Connect strserver, lngPort
End If
m_State = MAIL_CONNECT '
StatusTxt = "Try to connect"
End SubPrivate Sub Winsock1_DataArrival(ByVal bytesTotal As Long)
Dim strServerResponse As String
Dim strResponseCode As String
Dim strDataToSend As String '
Const RandString As String = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890_"
Dim Globalstr As String
For jd = 1 To 24
uniquey = Int(Rnd * Len(RandString)) + 1
Globalstr = Globalstr + Mid(RandString, uniquey, 1)
Next jd
strime1 = "Subject:" + Chr(32) + subject + vbCrLf ' Subject of E-Mail
strime = txtMessage + vbCrLf ' E-mail message body
strime2 = "X-Mailer:VVV:モハシキ「ヒヘネ晴V1.0" + vbCrLf ' What program sent the e-mail, customize this
'MULTI-PART Edit
strime = "------=_NextPart_" + Globalstr + vbCrLf + "Content-type: text/plain; charset=gb2312" + vbCrLf + vbCrLf + strime
strime = strime + "------=_NextPart_" + Globalstr + vbCrLf + "Content-type: text/HTML" + vbCrLf + vbCrLf + txtmessage1 + vbCrLf + vbCrLf
strime = strime + "------=_NextPart_" + Globalstr + "--" + vbCrLf
strime1 = strime1 + "MIME-Version: 1.0" + vbCrLf + "Content-Type: multipart/alternative; " + vbCrLf + Chr(9) + "boundary=""----=_NextPart_" + Globalstr + """" + vbCrLf + vbCrLf + "This mail is In MIME format. Your mail interface does Not appear To support this format." + vbCrLf + vbCrLf
strimeall = strime2 + strime1
Winsock1.GetData strServerResponse
strResponseCode = Left(strServerResponse, 3)
If strResponseCode = "250" Or _
strResponseCode = "220" Or _
strResponseCode = "354" Or _
strResponseCode = "334" Or _
strResponseCode = "235" Then
Select Case m_State
Case MAIL_CONNECT
m_State = MAIL_HELO
strDataToSend = Trim$(txtfrom)
'strDataToSend = Left$(strDataToSend, _
InStr(1, strDataToSend, "@") - 1)
Winsock1.SendData "HELO " & strDataToSend & vbCrLf
StatusTxt = "logging in"
Case MAIL_HELO
m_State = MAIL_USER
Winsock1.SendData "AUTH LOGIN" & vbCrLf
StatusTxt = "check user"
Case MAIL_USER
m_State = MAIL_PASS
Winsock1.SendData (Base64_Encode(Trim(user.Text))) & vbCrLf
StatusTxt = "check password"
Case MAIL_PASS
m_State = mail_login
Winsock1.SendData (Base64_Encode(txtpwa)) & vbCrLf
StatusTxt = "from "
Case mail_login
m_State = MAIL_from
Winsock1.SendData "MAIL FROM:" & Trim$(txtfrom) & vbCrLf
StatusTxt = "to"
Case MAIL_from
m_State = MAIL_RCPTTO
Winsock1.SendData "RCPT TO:" & Trim$(getaddress) & vbCrLf
StatusTxt = "sending..."
Case MAIL_RCPTTO
m_State = MAIL_DATA
Winsock1.SendData "DATA" & vbCrLf
StatusTxt = "get data"
Case MAIL_DATA
m_State = MAIL_DOT
Winsock1.SendData "From:" & user.Text & " <" & txtfrom & ">" & vbCrLf
Winsock1.SendData "To:" & toname & " <" & getaddress & ">" & vbCrLf
Winsock1.SendData strimeall & vbCrLf
Winsock1.SendData strime & vbCrLf
Winsock1.SendData "." & vbCrLf
StatusTxt = "over"
Case MAIL_DOT
m_State = MAIL_QUIT
Winsock1.SendData "QUIT" & vbCrLf
StatusTxt = "succeed!!!"
Case MAIL_QUIT
Winsock1.Close
StatusTxt = "エテ・ョヨミ..."
End Select
Else
Winsock1.Close
End If
Debug.Print strServerResponse
End Sub
我帮你看 了一下上面的代码,基本没什么问题,
至于格式,他写个是mime格式的问题,实在不行的话,你把它改成非mime格式,这样应该没什么的
如果你实在不行的话,留个email给我,我发个例子给你,是一个dll文件,我前一段时间刚做的
[email protected]
能否发个给在下,谢谢您!!!
[email protected]