Как увеличить размер сообщения,посылаемого через Socket?

Язык Visual Basic на платформе .NET.

Модераторы: Ramzes, Sebas

Anatoliy
Новичок
Новичок
 
Сообщения: 28
Зарегистрирован: 12.01.2005 (Ср) 18:13
Откуда: Kiev

Как увеличить размер сообщения,посылаемого через Socket?

Сообщение Anatoliy » 15.06.2005 (Ср) 13:44

Добрый день.
При отправке данных через Socket столкнулся со следующей проблемой:
Если через TcpClient - NetworkStream посылать строку длиннее, чем 1023 символа, почта просто не доходит. Если меньше сообщения проходят успешно.
Как отправить на eMail содержимое текстового файла, длина которого, например, 5000 символов?

Код: Выделить всё
'http://abstractvb.com/code.asp?A=1085
Imports System.IO
Imports System.Net.Sockets
Imports System.Text

Module SocketMail

    Dim ns As NetworkStream
    Dim client As TcpClient

    Public Function SendMail(ByVal sFrom As String, ByVal sTo As String, ByVal sFilePath As String, ByVal sServer As String, ByVal iMaxLength As Integer, ByRef iWasSend As Integer) As Boolean
        Dim sB As New StringBuilder
        Dim iPort As Integer = 25
        Dim strMessage As String
        Dim sSubject As String = "Testing message"

        Try
            'Open
            client = New TcpClient
            client.Connect(sServer, iPort)
            ns = client.GetStream()

            strMessage = "HELO TEST" & ControlChars.CrLf
            Call SendCommand(aStr:=strMessage)

            sB.Length = 0
            sB.Append("MAIL FROM:" & sFrom & ControlChars.CrLf)
            sB.Append("RCPT TO:" & sTo & ControlChars.CrLf)
            sB.Append("DATA" & ControlChars.CrLf)
            sB.Append("date:" & ControlChars.CrLf)  '_date.ToString & ControlChars.CrLf)
            sB.Append("from:" & sFrom & ControlChars.CrLf)
            sB.Append("to:" & sTo & ControlChars.CrLf)
            sB.Append("cc:" & ControlChars.CrLf)
            sB.Append("bcc:" & ControlChars.CrLf)
            sB.Append("subject:" & sSubject & ControlChars.CrLf)

            'текст письма
            Dim sRd As StreamReader
            Try
                sRd = New StreamReader(sFilePath, Encoding.GetEncoding(866))
                While Not (sRd.Peek = -1)
                    sB.Append(sRd.ReadLine & ControlChars.CrLf)
                End While '(sRd.Peek = -1)
            Catch ex As Exception
                Throw New Exception("Ошибка при отправке тела письма" & ControlChars.CrLf & ex.ToString)
            Finally
                sRd.Close()
            End Try

            'ограничим тело письма размером iMaxLength
            '(чтобы определить максимально допустимый размер)
            If sB.Length > iMaxLength Then
                sB.Length = iMaxLength
                sB.Append(ControlChars.CrLf)
            End If
            sB.Append("." & ControlChars.CrLf)

            iWasSend = sB.Length 'передать обратно к-во отправленных символов
            Call SendCommand(aStr:=sB.ToString)

            strMessage = "QUIT" & ControlChars.CrLf
            Call SendCommand(aStr:=strMessage)

        Catch ex As Exception
            Throw New Exception("Ошибка при отправке тела письма" & ControlChars.CrLf & ex.ToString)
            Return False
        Finally
            client.Close()
            client = Nothing
            ns = Nothing
        End Try
        Return True
    End Function

    Private Sub SendCommand(ByVal aStr As String)
        Dim sendBytes As [Byte]() = Encoding.Default.GetBytes(aStr)
        ns.Write(sendBytes, 0, sendBytes.Length)
    End Sub
End Module


Для отправки содержимого файла вызываю отправку почты след. образом:
Код: Выделить всё
Private Sub btnSendMail_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnSendMail.Click
        Dim sAddr() As String = {"krasovskiy@gmail.com", "salve0@marm.com.ua", "textbox@inbox.ru"}
        Dim sSMTP() As String = {"smtp.gmail.com", "marm.com.ua", "smtp.inbox.ru"}
        Dim iAddr As Integer = 1
        Dim sFrom As String = sAddr(iAddr)
        Dim sTo As String = sAddr(iAddr)
        Dim sFilePath As String = "D:\AK\AK\Projects\Test\OnlyTest\OnlyTest_Jun_NET\Data\Z5018.TXT"
        Dim sServer As String = sSMTP(iAddr)
        Dim iMaxLength As Integer
        Dim iWasSend As Integer



        Try
            iMaxLength = CInt(txtBoxMaxSize.Text)
        Catch ex As Exception
            iMaxLength = 3000
        End Try
        Call SendMail(sFrom:=sFrom, sTo:=sTo, sFilePath:=sFilePath, sServer:=sServer, iMaxLength:=iMaxLength, iWasSend:=iWasSend)
        MsgBox(iWasSend.ToString)
    End Sub
Anatoliy

Вернуться в Visual Basic .NET

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 12

    TopList