Class

# SMTPSecureSocket

---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

## Description

Used to send secure email via the SMTP protocol using SSL or TLS encryption.

## Properties

<div class="rst-class">

table-centered_columns_3_and_4

</div>

| Name                                                                  | Type                                                        | Read-Only | Shared |
|-----------------------------------------------------------------------|-------------------------------------------------------------|-----------|--------|
| `Address<smtpsecuresocket.address>`                                   | `String</api/data_types/string>`                            |           |        |
| `BytesAvailable<smtpsecuresocket.bytesavailable>`                     | `Integer</api/data_types/integer>`                          | ✓         |        |
| `BytesLeftToSend<smtpsecuresocket.byteslefttosend>`                   | `Integer</api/data_types/integer>`                          | ✓         |        |
| `CertificateFile<smtpsecuresocket.certificatefile>`                   | `FolderItem</api/files/folderitem>`                         |           |        |
| `CertificatePassword<smtpsecuresocket.certificatepassword>`           | `String</api/data_types/string>`                            |           |        |
| `CertificateRejectionFile<smtpsecuresocket.certificaterejectionfile>` | `FolderItem</api/files/folderitem>`                         |           |        |
| `Handle<smtpsecuresocket.handle>`                                     | `Integer</api/data_types/integer>`                          | ✓         |        |
| `IsConnected<smtpsecuresocket.isconnected>`                           | `Boolean</api/data_types/boolean>`                          | ✓         |        |
| `LocalAddress<smtpsecuresocket.localaddress>`                         | `String</api/data_types/string>`                            | ✓         |        |
| `Messages<smtpsecuresocket.messages>`                                 | `EmailMessage</api/networking/emailmessage>`                |           |        |
| `NetworkInterface<smtpsecuresocket.networkinterface>`                 | `NetworkInterface</api/networking/networkinterface>`        |           |        |
| `Password<smtpsecuresocket.password>`                                 | `String</api/data_types/string>`                            |           |        |
| `Port<smtpsecuresocket.port>`                                         | `Integer</api/data_types/integer>`                          |           |        |
| `RemoteAddress<smtpsecuresocket.remoteaddress>`                       | `String</api/data_types/string>`                            | ✓         |        |
| `SMTPConnectionType<smtpsecuresocket.smtpconnectiontype>`             | `SMTPConnectionTypes<smtpsecuresocket.smtpconnectiontypes>` |           |        |
| `SSLConnected<smtpsecuresocket.sslconnected>`                         | `Boolean</api/data_types/boolean>`                          | ✓         |        |
| `SSLConnecting<smtpsecuresocket.sslconnecting>`                       | `Boolean</api/data_types/boolean>`                          | ✓         |        |
| `SSLConnectionType<smtpsecuresocket.sslconnectiontype>`               | `SSLConnectionTypes<sslsocket.sslconnectiontypes>`          |           |        |
| `SSLEnabled<smtpsecuresocket.sslenabled>`                             | `Boolean</api/data_types/boolean>`                          |           |        |
| `Username<smtpsecuresocket.username>`                                 | `String</api/data_types/string>`                            |           |        |

## Methods

<div class="rst-class">

table-centered_column_4

</div>

| Name                                                          | Parameters                                                                                                                               | Returns                            | Shared |
|---------------------------------------------------------------|------------------------------------------------------------------------------------------------------------------------------------------|------------------------------------|--------|
| `Close<smtpsecuresocket.close>`                               |                                                                                                                                          |                                    |        |
| `Connect<smtpsecuresocket.connect>`                           |                                                                                                                                          |                                    |        |
| `Disconnect<smtpsecuresocket.disconnect>`                     |                                                                                                                                          |                                    |        |
| `DisconnectFromServer<smtpsecuresocket.disconnectfromserver>` |                                                                                                                                          |                                    |        |
| `EndOfFile<smtpsecuresocket.endoffile>`                       |                                                                                                                                          | `Boolean</api/data_types/boolean>` |        |
| `Flush<smtpsecuresocket.flush>`                               |                                                                                                                                          |                                    |        |
| `Listen<smtpsecuresocket.listen>`                             |                                                                                                                                          |                                    |        |
| `Lookahead<smtpsecuresocket.lookahead>`                       | Encoding As `TextEncoding</api/text/encoding_text/textencoding>` = `Nil</api/language/nil>`                                              | `String</api/data_types/string>`   |        |
| `Poll<smtpsecuresocket.poll>`                                 |                                                                                                                                          |                                    |        |
| `Purge<smtpsecuresocket.purge>`                               |                                                                                                                                          |                                    |        |
| `Read<smtpsecuresocket.read>`                                 | Bytes As `Integer</api/data_types/integer>`, Encoding As `TextEncoding</api/text/encoding_text/textencoding>` = `Nil</api/language/nil>` | `String</api/data_types/string>`   |        |
| `ReadAll<smtpsecuresocket.readall>`                           | Encoding As `TextEncoding</api/text/encoding_text/textencoding>` = `Nil</api/language/nil>`                                              | `String</api/data_types/string>`   |        |
| `ReadError<smtpsecuresocket.readerror>`                       |                                                                                                                                          | `Boolean</api/data_types/boolean>` |        |
| `RemoveAllMessages<smtpsecuresocket.removeallmessages>`       |                                                                                                                                          |                                    |        |
| `SendMail<smtpsecuresocket.sendmail>`                         |                                                                                                                                          |                                    |        |
| `Write<smtpsecuresocket.write>`                               | Data As `String</api/data_types/string>`                                                                                                 |                                    |        |
| `WriteError<smtpsecuresocket.writeerror>`                     |                                                                                                                                          | `Boolean</api/data_types/boolean>` |        |

## Events

<div class="rst-class">

table-centered_column_4

</div>

| Name                                                            | Parameters                                                                                                                                             | Returns                            |
|-----------------------------------------------------------------|--------------------------------------------------------------------------------------------------------------------------------------------------------|------------------------------------|
| `ConnectionEstablished<smtpsecuresocket.connectionestablished>` | greeting As `String</api/data_types/string>`                                                                                                           |                                    |
| `Error<smtpsecuresocket.error>`                                 | e As `RuntimeException</api/exceptions/runtimeexception>`                                                                                              |                                    |
| `MailSent<smtpsecuresocket.mailsent>`                           |                                                                                                                                                        |                                    |
| `MessageSent<smtpsecuresocket.messagesent>`                     | Email As `EmailMessage</api/networking/emailmessage>`                                                                                                  |                                    |
| `SendProgress<smtpsecuresocket.sendprogress>`                   | BytesSent As `Integer</api/data_types/integer>`, BytesLeft As `Integer</api/data_types/integer>`                                                       | `Boolean</api/data_types/boolean>` |
| `ServerError<smtpsecuresocket.servererror>`                     | ErrorID As `Integer</api/data_types/integer>`, ErrorMessage As `String</api/data_types/string>`, Email As `EmailMessage</api/networking/emailmessage>` |                                    |

## Enumerations

<div id="smtpsecuresocket.smtpconnectiontypes">

<div class="rst-class">

forsearch

</div>

</div>

SMTPSecureSocket.SMTPConnectionTypes

### SMTPConnectionTypes

> Specifies the types of connections a <span class="title-ref">SMTPSecureSocket</span> can make.
>
> | Types    |
> |----------|
> | STARTTLS |
> | SSLTLS   |

## Property descriptions

<div id="smtpsecuresocket.address">

---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

</div>

<div class="rst-class">

forsearch

</div>

SMTPSecureSocket.Address

**Address** As `String</api/data_types/string>`

> The TCP/IP address to try to connect to.
>
> In this example, the address has been entered into a `TextField</api/user_interface/desktop/desktoptextfield>`.
>
> ``` xojo
> SMTPSecureSocket1.Address = TextField1.Text
> ```

<div id="smtpsecuresocket.bytesavailable">

---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

</div>

<div class="rst-class">

forsearch

</div>

SMTPSecureSocket.BytesAvailable

**BytesAvailable** As `Integer</api/data_types/integer>`

> The number of bytes of data are available in the internal receive buffer.
>
> This property is read-only.
>
> ``` xojo
> TextField1.Text = Me.BytesAvailable.ToString
> ```

<div id="smtpsecuresocket.byteslefttosend">

---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

</div>

<div class="rst-class">

forsearch

</div>

SMTPSecureSocket.BytesLeftToSend

**BytesLeftToSend** As `Integer</api/data_types/integer>`

> The number of bytes left in the queue remaining to be sent.
>
> This property is read-only.
>
> This enables you to create a synchronous socket without needing to subclass it.
>
> ``` xojo
> TextField1.Text = Me.BytesLeftToSend.ToString
> ```

<div id="smtpsecuresocket.certificatefile">

---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

</div>

<div class="rst-class">

forsearch

</div>

SMTPSecureSocket.CertificateFile

**CertificateFile** As `FolderItem</api/files/folderitem>`

> The file that contains the SSL certificate.
>
> This example opens the certificate file and assigns it to the property.
>
> ``` xojo
> Var f As FolderItem = FolderItem.ShowOpenFileDialog("text/plain")
>
> If f <> Nil Then
>   SMTPSecureSocket1.CertificateFile = f
> End If
> ```

<div id="smtpsecuresocket.certificatepassword">

---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

</div>

<div class="rst-class">

forsearch

</div>

SMTPSecureSocket.CertificatePassword

**CertificatePassword** As `String</api/data_types/string>`

> The certificate password for the secure connection.
>
> This example sets the certificate password from a `TextField</api/user_interface/desktop/desktoptextfield>`.
>
> ``` xojo
> SMTPSecureSocket1.CertificatePassword = TextField1.Text
> ```

<div id="smtpsecuresocket.certificaterejectionfile">

---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

</div>

<div class="rst-class">

forsearch

</div>

SMTPSecureSocket.CertificateRejectionFile

**CertificateRejectionFile** As `FolderItem</api/files/folderitem>`

> The certificate rejection file.
>
> This example gets the certificate rejection file from disk.
>
> ``` xojo
> Var f As FolderItem = FolderItem.ShowOpenFileDialog("text/plain")
>
> If f <> Nil Then
>   SMTPSecureSocket1.CertificateRejectionFile = f
> End If
> ```

<div id="smtpsecuresocket.handle">

---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

</div>

<div class="rst-class">

forsearch

</div>

SMTPSecureSocket.Handle

**Handle** As `Integer</api/data_types/integer>`

> This is the socket's internal descriptor and it can be used with `Declare</api/language/declare>` statements.
>
> This property is read-only.
>
> - On Windows, Handle is a Socket, suitable for use in `Declares</api/language/declare>` on Windows.
> - On macOS and Linux, Handle is a UNIX socket descriptor.
>
> The descriptor is platform-specific. If *Handle* is less than zero, the descriptor is not available.

<div id="smtpsecuresocket.isconnected">

---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

</div>

<div class="rst-class">

forsearch

</div>

SMTPSecureSocket.IsConnected

**IsConnected** As `Boolean</api/data_types/boolean>`

> Indicates whether the socket is currently connected.
>
> This property is read-only.
>
> For `TCPSockets</api/networking/tcpsocket>`, a connection means you can send and receive data and are connected to a remote machine. For `UDPSockets</api/networking/udpsocket>`, this means that you are bound to the port and are able to send, receive, join or leave multicast groups, or set socket options.
>
> ``` xojo
> If SMTPSecureSocket1.IsConnected Then
>   ' proceed using the connection
> Else
>   MessageBox("Connection failed!")
> End If
> ```

<div id="smtpsecuresocket.localaddress">

---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

</div>

<div class="rst-class">

forsearch

</div>

SMTPSecureSocket.LocalAddress

**LocalAddress** As `String</api/data_types/string>`

> The local IP address of the computer.
>
> This property is read-only.
>
> ``` xojo
> Var localIP As String = SMTPSecureSocket1.LocalAddress
> ```

<div id="smtpsecuresocket.messages">

---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

</div>

<div class="rst-class">

forsearch

</div>

SMTPSecureSocket.Messages

**Messages** As `EmailMessage</api/networking/emailmessage>`

> The queue of messages that are waiting to be sent.
>
> This is an array of which the 0th element is the next message to be sent. When a message is sent, it is removed from the queue and passed to the MessageSent event. To add a message to the queue, use the `Arrays<arrays.add>` method. To remove a message, use the `Arrays<arrays.removeat>` method.
>
> Send a simple email:
>
> ``` xojo
> Var mail As EmailMessage
>
> ' set up the socket
> Socket1.Address = "smtp.myserver.com"
> Socket1.Port = 25
>
> Socket1.UserName = "<username>"
> Socket1.Password = "<password>"
>
> ' populate the email message
> mail = New EmailMessage
> mail.FromAddress = "test@testsite.org"
> mail.Subject = "My Subject"
> mail.BodyPlainText = "Hello!"
> mail.Headers.AddHeader("X-Mailer","SMTP Test")
>
> ' send the email
> Socket1.Messages.AddRow(mail)
> Socket1.SendMail
> ```

<div id="smtpsecuresocket.networkinterface">

---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

</div>

<div class="rst-class">

forsearch

</div>

SMTPSecureSocket.NetworkInterface

**NetworkInterface** As `NetworkInterface</api/networking/networkinterface>`

> Specifies which network interface the socket should use when binding.
>
> You can get the network interface(s) of the user's computer by calling the `GetNetworkInterface<system.networkinterface>` method of the `System</api/os/system>` module.
>
> Leaving this property set to `Nil</api/language/nil>` will use the currently selected interface. In the case of `UDPSockets</api/networking/udpsocket>`, if you assign a non-`Nil</api/language/nil>` value, the socket may not be able to receive broadcast messages. The behavior is OS-dependent; it appears to work on Windows but not on other supported operating systems. If you wish to send broadcast packets out, then you should not bind to a specific interface because the behavior is undefined.
>
> This example specifies that the <span class="title-ref">SMTPSecureSocket</span> will use the first Network Interface on the user's computer.
>
> ``` xojo
> SMTPSecureSocket1.NetworkInterface = System.NetworkInterface(0)
> ```

<div id="smtpsecuresocket.password">

---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

</div>

<div class="rst-class">

forsearch

</div>

SMTPSecureSocket.Password

**Password** As `String</api/data_types/string>`

> The Password to use to log into the SMTP server.

<div id="smtpsecuresocket.port">

---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

</div>

<div class="rst-class">

forsearch

</div>

SMTPSecureSocket.Port

**Port** As `Integer</api/data_types/integer>`

> The port to bind on or connect to.
>
> On most operating systems, attempting to bind to a port less than 1024 causes a `Error<socketcore.error>` event to fire with an error number 107 unless the application is running with administrative permissions. This is due to security features built into the underlying OS.
>
> You need to set the port property explicitly before any call to Listen or Connect as the Port property will be modified to reflect what the actual bound port is during the various stages of operation.
>
> For instance, if you listen on port 8080 and a connection comes in, you can check the Port property to ensure that you're still listening on port 8080 (that the port hasn't been hijacked). Or, if you connect to a socket on port 8080, once the connection occurs, you can check to see what port the OS has bound you to. This will be a random-seeming port number.
>
> This trick can be very useful when you do things like Listen on port 0. In that case, the OS will pick a port for you and listen on it. Then you can check the Port property to see which port the OS picked. This functionality is used for various protocols, such as FTP.
>
> This example sets the Port to 8080.
>
> ``` xojo
> SMTPSecureSocket1.Port = 8080
> ```

<div id="smtpsecuresocket.remoteaddress">

---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

</div>

<div class="rst-class">

forsearch

</div>

SMTPSecureSocket.RemoteAddress

**RemoteAddress** As `String</api/data_types/string>`

> The address of the remote machine you are connected to.
>
> This property is read-only.
>
> Use this instead of the Address property to determine the address of the machine you are actually connected to.
>
> This example reports the address of the remote machine that the user is connected to. It is in the Connected event.
>
> ``` xojo
> TextField1.Text = Me.RemoteAddress
> ```

<div id="smtpsecuresocket.smtpconnectiontype">

---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

</div>

<div class="rst-class">

forsearch

</div>

SMTPSecureSocket.SMTPConnectionType

**SMTPConnectionType** As `SMTPConnectionTypes<smtpsecuresocket.smtpconnectiontypes>`

> The type of connection to make to the SMTP server. The default is STARTTLS.
>
> Use `SMTPSecureSocket<smtpsecuresocket.smtpconnectiontypes>` with this property.

<div id="smtpsecuresocket.sslconnected">

---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

</div>

<div class="rst-class">

forsearch

</div>

SMTPSecureSocket.SSLConnected

**SSLConnected** As `Boolean</api/data_types/boolean>`

> `True</api/language/true>` if you have an SSL connection.
>
> This property is read-only.
>
> ``` xojo
> If Me.SSLConnected Then
>   ' connection established with secure communications, proceed ...
> Else
>   Exit
> End If
> ```

<div id="smtpsecuresocket.sslconnecting">

---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

</div>

<div class="rst-class">

forsearch

</div>

SMTPSecureSocket.SSLConnecting

**SSLConnecting** As `Boolean</api/data_types/boolean>`

> `True</api/language/true>` if the socket is in the process of doing a handshake to establish an SSL connection.
>
> This property is read-only.
>
> ``` xojo
> If Me.SSLConnecting Then
>   ' proceed with connection
> End If
> ```

<div id="smtpsecuresocket.sslconnectiontype">

---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

</div>

<div class="rst-class">

forsearch

</div>

SMTPSecureSocket.SSLConnectionType

**SSLConnectionType** As `Integer</api/data_types/integer>`

> Specifies the type of SSL connection.
>
> <div class="note">
>
> <div class="title">
>
> Note
>
> </div>
>
> Use the SSLSocket constant names for ConnectionType, and not the integer values so that the IDE can warn you when constants are removed or deprecated.
>
> </div>
>
> Set this property by assigning a `SSLConnectionTypes<sslsocket.sslconnectiontypes>` value to it.
>
> The default is TLSv1. If you need to change the connection type, close the connection first.
>
> This example changes the connection type to TLSv1.
>
> ``` xojo
> SMTPSecureSocket1.SSLConnectionType = SSLSocket.SSLConnectionTypes.TLSv1
> ```

<div id="smtpsecuresocket.sslenabled">

---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

</div>

<div class="rst-class">

forsearch

</div>

SMTPSecureSocket.SSLEnabled

**SSLEnabled** As `Boolean</api/data_types/boolean>`

> Set to `True</api/language/true>` to specify an SSL connection.
>
> If SSLEnabled is `False</api/language/false>`, the **SSLSocket** transmits data just like a `TCPSocket</api/networking/tcpsocket>`. This property can be toggled at any time.
>
> ``` xojo
> Me.SSLEnabled = True
> ```

<div id="smtpsecuresocket.username">

---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

</div>

<div class="rst-class">

forsearch

</div>

SMTPSecureSocket.Username

**Username** As `String</api/data_types/string>`

> The Username to use to log into the SMTP server.

## Method descriptions

<div id="smtpsecuresocket.close">

---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

</div>

<div class="rst-class">

forsearch

</div>

SMTPSecureSocket.Close

**Close**

> Closes the socket's connection, closes any connections the socket may have, and resets the socket.
>
> The only information that is retained after calling Close is the socket's port, address (in the case of `TCPSockets</api/networking/tcpsocket>`), and data left in the socket's receive buffer. All other information is discarded.
>
> This example closes the `EasyTCPSockets</api/networking/easytcpsocket>` that were open. The sockets were added to the main window.
>
> ``` xojo
> Connector.Close
> Listener.Close
> ```

<div id="smtpsecuresocket.connect">

---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

</div>

<div class="rst-class">

forsearch

</div>

SMTPSecureSocket.Connect

**Connect**

> Attempts to connect.
>
> For `TCPSockets</api/networking/tcpsocket>`, the address and port properties must be set. For `UDPSockets</api/networking/udpsocket>`, the port property must be set. The Connect method binds a socket to a port. After calling Connect, the Port property will report the actual port you are bound to.

<div id="smtpsecuresocket.disconnect">

---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

</div>

<div class="rst-class">

forsearch

</div>

SMTPSecureSocket.Disconnect

**Disconnect**

> Disconnects the socket, resets it, and fires a `SocketCore</api/networking/socketcore>` Error event with a 102 error to let you know that the socket has been disconnected.
>
> This example disconnects the `EasyTCPSockets</api/networking/easytcpsocket>` that were opened.
>
> ``` xojo
> Connector.Disconnect
> Listener.Disconnect
> ```

<div id="smtpsecuresocket.disconnectfromserver">

---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

</div>

<div class="rst-class">

forsearch

</div>

SMTPSecureSocket.DisconnectFromServer

**DisconnectFromServer**

> Closes the connection with the mail server.

<div id="smtpsecuresocket.endoffile">

---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

</div>

<div class="rst-class">

forsearch

</div>

SMTPSecureSocket.EndOfFile

**EndOfFile** As `Boolean</api/data_types/boolean>`

> Returns `True</api/language/true>` when there's no more data left to read.
>
> This code reads the rows and columns of data from a tab-delimited text file into a `ListBox</api/user_interface/desktop/desktoplistbox>`:
>
> ``` xojo
> Var f As FolderItem = FolderItem.ShowOpenFileDialog("text/plain") ' defined as a FileType
>
> If f <> Nil Then
>
>   Var textInput As TextInputStream
>   Var rowFromFile, oneCell As String    
>
>   textInput = TextInputStream.Open(f)
>   textInput.Encoding = Encodings.UTF8
>
>   Do
>
>     rowFromFile = textInput.ReadLine
>
>     Var values() As String = rowFromFile.ToArray(String.Chr(9))
>
>     ListBox1.ColumnCount = values.Count
>     ListBox1.AddRow("")
>
>     Var col As Integer
>
>     For Each value As String In values
>
>       ListBox1.CellTextAt(ListBox1.LastAddedRowIndex, col) = value
>       col = col + 1
>
>     End For
>
>   Loop Until textInput.EndOfFile
>
>   textInput.Close
>
> End If
> ```
>
> This example reads each pair of bytes from a file and writes them in reverse order to a new file. The user chooses the source file using the Open-file dialog box and saves the new file using the Save as dialog box. The EOF property is used to terminate the `Do...Loop</api/language/loops/do...loop>`.
>
> ``` xojo
> Var readFile As FolderItem = FolderItem.ShowOpenFileDialog("text")
>
> If readFile <> Nil Then
>
>   Var ReadStream As BinaryStream = BinaryStream.Open(readFile, False)   
>   Var writeFile As FolderItem = FolderItem.ShowSaveFileDialog("", "")
>
>   ReadStream.LittleEndian = True
>
>   If writeFile <> Nil Then
>
>     Var writeStream As BinaryStream = BinaryStream.Create(writeFile, True)
>
>     writeStream.LittleEndian = True
>
>     Do Until ReadStream.EndOfFile
>       writeStream.WriteInt8(ReadStream.ReadInt8)
>     Loop
>
>     writeStream = Nil
>
>   End If
>
> readStream = Nil
> ```
>
> End If

<div id="smtpsecuresocket.flush">

---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

</div>

<div class="rst-class">

forsearch

</div>

SMTPSecureSocket.Flush

**Flush**

> Immediately sends the contents of internal write buffers to disk or to the output stream.
>
> This function can be useful in point-to-point communication over sockets and similar connections: To optimize for transmission performance, some types of output streams try to collect small pieces of written data into one larger piece for sending instead of sending each piece out individually. By calling Flush, the data collection is stopped and the data is sent without further delay, reducing latency.
>
> When using this on a stream that ends up as a file on disk, it is useful, too: Any short parts of previously written data are written to disk right away, ensuring the data is actually on disk if the application terminates abruptly, e.g. due to a crash.
>
> Avoid calling this method too often. For example, do not call it between successive Write calls because you'll slow down performance without getting much benefit.
>
> A typical use case would look like this:
>
> ``` xojo
> mySocket.Write("you typed: ")
> mySocket.Write(key)
> mySocket.Write(".")
> mySocket.Flush
> ```

<div id="smtpsecuresocket.listen">

---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

</div>

<div class="rst-class">

forsearch

</div>

SMTPSecureSocket.Listen

**Listen**

> Attempts to listen for incoming connections on the currently specified port.
>
> After calling Listen, the Port property will report the actual port you are bound to.

<div id="smtpsecuresocket.lookahead">

---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

</div>

<div class="rst-class">

forsearch

</div>

SMTPSecureSocket.Lookahead

**Lookahead**(Encoding As `TextEncoding</api/text/encoding_text/textencoding>` = `Nil</api/language/nil>`) As `String</api/data_types/string>`

> Returns a `String</api/data_types/string>`, containing the data that is available in the internal queue without removing it.
>
> The optional *Encoding* parameter enables you to specify the text encoding of the data to be returned. The default is `Nil</api/language/nil>`. Use the `Encodings</api/text/encoding_text/encodings>` module to specify an encoding.
>
> This example adds the contents of the internal queue to a `TextArea</api/user_interface/desktop/desktoptextarea>`. The Listener `EasyTCPSocket</api/networking/easytcpsocket>` has been added to the window.
>
> ``` xojo
> TextArea1.AddText(listener.Lookahead)
> ```

<div id="smtpsecuresocket.poll">

---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

</div>

<div class="rst-class">

forsearch

</div>

SMTPSecureSocket.Poll

**Poll**

> Polls the socket manually, which allows a socket to be used synchronously.
>
> The following example polls the <span class="title-ref">SMTPSecureSocket</span>.
>
> ``` xojo
> Listener.Poll
> ```

<div id="smtpsecuresocket.purge">

---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

</div>

<div class="rst-class">

forsearch

</div>

SMTPSecureSocket.Purge

**Purge**

> Removes all data from the socket's internal receive buffer. It does not affect the socket's internal send buffer.
>
> ``` xojo
> Listener.Purge
> ```

<div id="smtpsecuresocket.read">

---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

</div>

<div class="rst-class">

forsearch

</div>

SMTPSecureSocket.Read

**Read**(Bytes As `Integer</api/data_types/integer>`, Encoding As `TextEncoding</api/text/encoding_text/textencoding>` = `Nil</api/language/nil>`) As `String</api/data_types/string>`

> Reads *Bytes* bytes from the input stream and returns a `String</api/data_types/string>`.
>
> If provided, the optional parameter *Encoding* specifies the text encoding to be defined for the `String</api/data_types/string>` to be read.
>
> If *Bytes* is higher than the amount of bytes currently available in the stream, all available bytes will be returned. Therefore, make sure to always consider the case that you get less than you requested. To see if you received all requested bytes, check the returned string's `String<string.bytes>` property (avoid using `Length<binarystream.length>` as it may give a different number if the encoding is not nil).
>
> If not enough memory is available, you get back an empty string.
>
> This example reads the first 1000 bytes from a `BinaryStream</api/files/binarystream>`.
>
> ``` xojo
> Var readFile As FolderItem = FolderItem.ShowOpenFileDialog("text/plain")
>
> If readFile <> Nil Then
>
>   Var ReadStream As BinaryStream = BinaryStream.Open(readFile, False)
>
>   ReadStream.LittleEndian = True
>   TextArea1.Text = ReadStream.Read(1000, Encodings.UTF8)
>
> End If
> ```

<div id="smtpsecuresocket.readall">

---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

</div>

<div class="rst-class">

forsearch

</div>

SMTPSecureSocket.ReadAll

**ReadAll**(Encoding As `TextEncoding</api/text/encoding_text/textencoding>` = `Nil</api/language/nil>`) As `String</api/data_types/string>`

> Reads all the data from the internal buffer.
>
> This example reads all the data in the buffer into a `TextArea</api/user_interface/desktop/desktoptextarea>`.
>
> ``` xojo
> TextField1.AddText(listener.ReadAll)
> ```

<div id="smtpsecuresocket.readerror">

---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

</div>

<div class="rst-class">

forsearch

</div>

SMTPSecureSocket.ReadError

**ReadError** As `Boolean</api/data_types/boolean>`

> If `True</api/language/true>` then an error occurred during reading.

<div id="smtpsecuresocket.removeallmessages">

---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

</div>

<div class="rst-class">

forsearch

</div>

SMTPSecureSocket.RemoveAllMessages

**RemoveAllMessages**

> Removes all messages from the send queue.
>
> This example removes all the messages in the queue.
>
> ``` xojo
> SMTPSecureSocket1.RemoveAllMessages
> ```

<div id="smtpsecuresocket.sendmail">

---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

</div>

<div class="rst-class">

forsearch

</div>

SMTPSecureSocket.SendMail

**SendMail**

> Connects to the mail server, sends the messages in the queue, and disconnects. SendMail is asynchronous.

<div id="smtpsecuresocket.write">

---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

</div>

<div class="rst-class">

forsearch

</div>

SMTPSecureSocket.Write

**Write**(Data As `String</api/data_types/string>`)

> Writes the passed data to the output stream.
>
> Note that in order to make sure that the data actually ends up on disk or gets sent to the socket it is connected to, the stream must either get closed or the `Flush<writeable.flush>` method be called. Otherwise, the data, if small, may end up temporarily in a write buffer before either a certain time has passed or more data is written. This buffering increases performance when writing lots of small pieces of data, but may be causing unwanted delays when another process, e.g. the other end of a socket connection, is waiting for the data. Consider calling the `Flush<writeable.flush>` method to reduce latencies that this buffering may cause in such cases.
>
> If Write fails, an `IOException</api/exceptions/ioexception>` will be raised.
>
> This example displays the Save As dialog box and writes the contents of the TextArea1 to a text file.
>
> ``` xojo
> Var f As FolderItem = FolderItem.ShowSaveFileDialog(FileTypes1.Text, "Untitled.txt")
>
> If f <> Nil Then
>
>   Var stream As BinaryStream    
>
>   stream = BinaryStream.Create(f, True)
>   stream.Write(TextArea1.Text)
>   stream.Close
>
> End If
> ```

<div id="smtpsecuresocket.writeerror">

---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

</div>

<div class="rst-class">

forsearch

</div>

SMTPSecureSocket.WriteError

**WriteError** As `Boolean</api/data_types/boolean>`

> If `True</api/language/true>` then an error occurred during writing.

## Event descriptions

<div id="smtpsecuresocket.connectionestablished">

---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

</div>

<div class="rst-class">

forsearch

</div>

SMTPSecureSocket.ConnectionEstablished

**ConnectionEstablished**(greeting As `String</api/data_types/string>`)

> Executes when the connection has been established with the mail server and passes the greeting string that the server returned.

<div id="smtpsecuresocket.error">

---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

</div>

<div class="rst-class">

forsearch

</div>

SMTPSecureSocket.Error

**Error**(e As `RuntimeException</api/exceptions/runtimeexception>`)

> Occurs when an error occurs with the socket.
>
> These error codes provide you with key information about your socket, and it is not advisable to ignore them.
>
> When an error occurs, the `RuntimeException<runtimeexception.errornumber>` property will likely contain one of the following error codes:
>
> | Error Code | Description                                                                                                                                            |
> |------------|--------------------------------------------------------------------------------------------------------------------------------------------------------|
> | 0          | No error occurred.                                                                                                                                     |
> | 100        | There was an error opening and initializing the drivers.                                                                                               |
> | 101        | This error code is no longer used.                                                                                                                     |
> | 102        | This code means that you lost your connection. If the remote side closed the connection, then it is not truly an error; it's just a status indication. |
> | 103        | The socket was unable to resolve the address that was specified.                                                                                       |
> | 104        | This error code is no longer used.                                                                                                                     |
> | 105        | The address is currently in use.                                                                                                                       |
> | 106        | This is an invalid state error, which means that the socket is not in the proper state to be doing a certain operation.                                |
> | 107        | This error means that the port you specified is invalid.                                                                                               |
> | 108        | This error indicates that your application has run out of memory.                                                                                      |
>
> Information on `additional error codes</api/networking/socket_error_codes>` is available.
>
> The following example in the Error event handler displays the error code.
>
> ``` xojo
> MessageBox(e.ErrorNumber.ToString)
> ```

<div id="smtpsecuresocket.mailsent">

---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

</div>

<div class="rst-class">

forsearch

</div>

SMTPSecureSocket.MailSent

**MailSent**

> Executes when all of the messages in the queue have been sent.

<div id="smtpsecuresocket.messagesent">

---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

</div>

<div class="rst-class">

forsearch

</div>

SMTPSecureSocket.MessageSent

**MessageSent**(Email As `EmailMessage</api/networking/emailmessage>`)

> Executes when a message has been sent; *Email* contains the message that was sent.

<div id="smtpsecuresocket.sendprogress">

---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

</div>

<div class="rst-class">

forsearch

</div>

SMTPSecureSocket.SendProgress

**SendProgress**(BytesSent As `Integer</api/data_types/integer>`, BytesLeft As `Integer</api/data_types/integer>`) As `Boolean</api/data_types/boolean>`

> Occurs when your network provider queues your data in chunks and is about to send the next chunk.
>
> The parameters indicate the amount of progress that has been made during the send. Returns a `Boolean</api/data_types/boolean>`.
>
> Returning `True</api/language/true>` from this event causes the send to be cancelled. This does not close the socket's connection; it only clears the buffer. After all of the data has been transferred you will get a final SendProgress event followed by a `SendComplete<socketcore.sendcomplete>` event.
>
> *bytesSent* is the number of bytes that were sent in the chunk, not the total number of bytes sent.

<div id="smtpsecuresocket.servererror">

---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

</div>

<div class="rst-class">

forsearch

</div>

SMTPSecureSocket.ServerError

**ServerError**(ErrorID As `Integer</api/data_types/integer>`, ErrorMessage As `String</api/data_types/string>`, Email As `EmailMessage</api/networking/emailmessage>`)

> Executes when an error occured while sending a message.
>
> *ErrorID* and *ErrorMessage* are sent by the mail server and *Email* is the message that was being sent when the error occurred. *Email* is removed from the queue at the time the event executes.

## Interfaces

This class implements the `Readable</api/files/readable>` and `Writeable</api/files/writeable>` class interfaces.

## Notes

The <span class="title-ref">SMTPSecureSocket</span> class is the same as the <span class="title-ref">SMTPSecureSocket</span> class except that it is derived from `SSLSocket</api/networking/sslsocket>` instead of `TCPSocket</api/networking/tcpsocket>`. As a result, you can use the Secure property of the `SSLSocket</api/networking/sslsocket>` class to provide secure communications.

If you use a constructor in a subclass of a <span class="title-ref">SMTPSecureSocket</span>, you must call the Super class's constructor in your subclass's constructor. The subclass will not work unless this is done.

---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

### Error codes

For a list of codes, refer here:

- [Understanding SMTP Error Codes](https://www.lifewire.com/smtp-error-messages-1166422)
- [RFC 5321](https://tools.ietf.org/html/rfc5321#section-4.2)

Keep in mind that some codes may be server specific.

---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

### Gmail

In order to connect to Gmail you'll need to enable the "allow less secure apps" option as described in this Google support document:

<https://support.google.com/accounts/answer/6010255>

With that enabled, these settings work for most users:

``` xojo
MailSocket.Address = "smtp.gmail.com"
MailSocket.Port = 465
MailSocket.SSLConnectionType = SSLSocket.SSLConnectionTypes.TLSv1
MailSocket.SMTPConnectionType = SMTPSecureSocket.SMTPConnectionTypes.SSLTLS
MailSocket.SSLEnabled = True
MailSocket.UserName = <YourGmailUserName>
MailSocket.Password = <YourGmailPassword>
```

---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

### Xojo Cloud

To access an SMTP server from web apps running on Xojo Cloud, you will first have to use the `FirewallPort</api/xojocloud/firewallport>` class to open the port used to connect to the SMTP Server:

``` xojo
Var fwp As New XojoCloud.FirewallPort(587, XojoCloud.FirewallPort.Direction.Outgoing)

fwp.Open ' This call is synchronous

If fwp.isOpen Then
  ' Do what you need to do
End If
```

## Sample code

This code uses an <span class="title-ref">SMTPSecureSocket</span> called MailSocket that has been added to a Window to send a simple email using Gmail. Update the Username, Password and email address in this code to use it.

``` xojo
' Connect to Gmail
MailSocket.Address = "smtp.gmail.com"
MailSocket.Port = 465
MailSocket.SSLConnectionType = SSLSocket.SSLConnectionTypes.TLSv1
MailSocket.SMTPConnectionType = SMTPSecureSocket.SMTPConnectionTypes.SSLTLS
MailSocket.SSLEnabled = True

MailSocket.Username = "<YourGmailUsername>" ' Provide your Gmail username
MailSocket.Password = "<YourGmailPassword>" ' Provide your Gmail password

' Create EmailMessage
Var mail As New EmailMessage

mail.FromAddress = "myemail@mydomain.com" ' Your from email address
mail.AddRecipient("recipient@domain.com") ' The recipient's email address
mail.Subject = "Test from Xojo"
mail.BodyPlainText = "This email was sent from a Xojo app."
mail.Headers.AddHeader("X-Mailer","SMTP Test")

' Send it
MailSocket.Messages.AddRow(mail)
MailSocket.SendMail
```

## Compatibility

|                       |                       |
|-----------------------|-----------------------|
| **Project Types**     | Console, Desktop, Web |
| **Operating Systems** | All                   |

<div class="seealso">

`SSLSocket</api/networking/sslsocket>` parent class; `EmailMessage</api/networking/emailmessage>`, `URLConnection</api/networking/urlconnection>`, `URLConnection</api/networking/urlconnection>`, `POP3SecureSocket</api/networking/pop3securesocket>`, `TCPSocket</api/networking/tcpsocket>`, `POP3SecureSocket</api/networking/pop3securesocket>`, `SocketCore</api/networking/socketcore>` classes.

</div>
