Search in sources :

Example 1 with SmtpDataStuffing

use of com.fsck.k9.mail.filter.SmtpDataStuffing in project k-9 by k9mail.

the class SmtpTransport method sendMessageTo.

private void sendMessageTo(List<String> addresses, Message message) throws MessagingException {
    close();
    open();
    if (!m8bitEncodingAllowed) {
        Log.d(LOG_TAG, "Server does not support 8bit transfer encoding");
    }
    // the size of messages, count the message's size before sending it
    if (mLargestAcceptableMessage > 0 && message.hasAttachments()) {
        if (message.calculateSize() > mLargestAcceptableMessage) {
            throw new MessagingException("Message too large for server", true);
        }
    }
    boolean entireMessageSent = false;
    Address[] from = message.getFrom();
    try {
        String fromAddress = from[0].getAddress();
        if (m8bitEncodingAllowed) {
            executeCommand("MAIL FROM:<%s> BODY=8BITMIME", fromAddress);
        } else {
            executeCommand("MAIL FROM:<%s>", fromAddress);
        }
        for (String address : addresses) {
            executeCommand("RCPT TO:<%s>", address);
        }
        executeCommand("DATA");
        EOLConvertingOutputStream msgOut = new EOLConvertingOutputStream(new LineWrapOutputStream(new SmtpDataStuffing(mOut), 1000));
        message.writeTo(msgOut);
        msgOut.endWithCrLfAndFlush();
        // After the "\r\n." is attempted, we may have sent the message
        entireMessageSent = true;
        executeCommand(".");
    } catch (NegativeSmtpReplyException e) {
        throw e;
    } catch (Exception e) {
        MessagingException me = new MessagingException("Unable to send message", e);
        me.setPermanentFailure(entireMessageSent);
        throw me;
    } finally {
        close();
    }
}
Also used : EOLConvertingOutputStream(com.fsck.k9.mail.filter.EOLConvertingOutputStream) SmtpDataStuffing(com.fsck.k9.mail.filter.SmtpDataStuffing) SocketAddress(java.net.SocketAddress) InetAddress(java.net.InetAddress) InetSocketAddress(java.net.InetSocketAddress) Address(com.fsck.k9.mail.Address) Inet6Address(java.net.Inet6Address) LineWrapOutputStream(com.fsck.k9.mail.filter.LineWrapOutputStream) MessagingException(com.fsck.k9.mail.MessagingException) URISyntaxException(java.net.URISyntaxException) CertificateValidationException(com.fsck.k9.mail.CertificateValidationException) GeneralSecurityException(java.security.GeneralSecurityException) SSLException(javax.net.ssl.SSLException) SocketException(java.net.SocketException) IOException(java.io.IOException) MessagingException(com.fsck.k9.mail.MessagingException) AuthenticationFailedException(com.fsck.k9.mail.AuthenticationFailedException)

Example 2 with SmtpDataStuffing

use of com.fsck.k9.mail.filter.SmtpDataStuffing in project k-9 by k9mail.

the class SmtpTransport method sendMessage.

@Override
public void sendMessage(Message message) throws MessagingException {
    Set<String> addresses = new LinkedHashSet<>();
    for (Address address : message.getRecipients(RecipientType.TO)) {
        addresses.add(address.getAddress());
    }
    for (Address address : message.getRecipients(RecipientType.CC)) {
        addresses.add(address.getAddress());
    }
    for (Address address : message.getRecipients(RecipientType.BCC)) {
        addresses.add(address.getAddress());
    }
    message.removeHeader("Bcc");
    if (addresses.isEmpty()) {
        return;
    }
    close();
    open();
    // the size of messages, count the message's size before sending it
    if (largestAcceptableMessage > 0 && message.hasAttachments()) {
        if (message.calculateSize() > largestAcceptableMessage) {
            throw new MessagingException("Message too large for server", true);
        }
    }
    boolean entireMessageSent = false;
    try {
        String mailFrom = constructSmtpMailFromCommand(message.getFrom(), is8bitEncodingAllowed);
        if (isPipeliningSupported) {
            Queue<String> pipelinedCommands = new LinkedList<>();
            pipelinedCommands.add(mailFrom);
            for (String address : addresses) {
                pipelinedCommands.add(String.format("RCPT TO:<%s>", address));
            }
            executePipelinedCommands(pipelinedCommands);
            readPipelinedResponse(pipelinedCommands);
        } else {
            executeCommand(mailFrom);
            for (String address : addresses) {
                executeCommand("RCPT TO:<%s>", address);
            }
        }
        executeCommand("DATA");
        EOLConvertingOutputStream msgOut = new EOLConvertingOutputStream(new LineWrapOutputStream(new SmtpDataStuffing(outputStream), 1000));
        message.writeTo(msgOut);
        msgOut.endWithCrLfAndFlush();
        // After the "\r\n." is attempted, we may have sent the message
        entireMessageSent = true;
        executeCommand(".");
    } catch (NegativeSmtpReplyException e) {
        throw e;
    } catch (Exception e) {
        throw new MessagingException("Unable to send message", entireMessageSent, e);
    } finally {
        close();
    }
}
Also used : LinkedHashSet(java.util.LinkedHashSet) EOLConvertingOutputStream(com.fsck.k9.mail.filter.EOLConvertingOutputStream) SocketAddress(java.net.SocketAddress) InetAddress(java.net.InetAddress) InetSocketAddress(java.net.InetSocketAddress) Address(com.fsck.k9.mail.Address) Inet6Address(java.net.Inet6Address) MessagingException(com.fsck.k9.mail.MessagingException) LinkedList(java.util.LinkedList) CertificateValidationException(com.fsck.k9.mail.CertificateValidationException) SocketException(java.net.SocketException) GeneralSecurityException(java.security.GeneralSecurityException) IOException(java.io.IOException) SSLException(javax.net.ssl.SSLException) MessagingException(com.fsck.k9.mail.MessagingException) AuthenticationFailedException(com.fsck.k9.mail.AuthenticationFailedException) SmtpDataStuffing(com.fsck.k9.mail.filter.SmtpDataStuffing) LineWrapOutputStream(com.fsck.k9.mail.filter.LineWrapOutputStream)

Aggregations

Address (com.fsck.k9.mail.Address)2 AuthenticationFailedException (com.fsck.k9.mail.AuthenticationFailedException)2 CertificateValidationException (com.fsck.k9.mail.CertificateValidationException)2 MessagingException (com.fsck.k9.mail.MessagingException)2 EOLConvertingOutputStream (com.fsck.k9.mail.filter.EOLConvertingOutputStream)2 LineWrapOutputStream (com.fsck.k9.mail.filter.LineWrapOutputStream)2 SmtpDataStuffing (com.fsck.k9.mail.filter.SmtpDataStuffing)2 IOException (java.io.IOException)2 Inet6Address (java.net.Inet6Address)2 InetAddress (java.net.InetAddress)2 InetSocketAddress (java.net.InetSocketAddress)2 SocketAddress (java.net.SocketAddress)2 SocketException (java.net.SocketException)2 GeneralSecurityException (java.security.GeneralSecurityException)2 SSLException (javax.net.ssl.SSLException)2 URISyntaxException (java.net.URISyntaxException)1 LinkedHashSet (java.util.LinkedHashSet)1 LinkedList (java.util.LinkedList)1