Следующий код требует рефакторинга:

public class MailingServiceImpl implements MailingService {

    @Override
    public sendMail(Message message) {
        Message signedMessage = addDefaultSign(message);
        ...
    }

    /**
     * Добавление подписи по умолчанию
     * @param message сообщение
     * @return сообщение с подписью
     */
    private Message addDefaultSign(Message message) { ... }
}

Конкретно, метод addDefaultSign нужно вынести в отдельный сервис. Почему?

Приватный метод имеет javadoc - видимо, автор надеялся так объяснять его предназначение, ведь по-другому никак не удастся. Но, все равно, пользуясь сервисом MailingServiceImpl, надо всегда держать в голове то, что он добавляет к сообщению подпись, потому что в имени сервиса это никак не отражено. Более того, если вдруг заказчик придет и скажет, что ему нужно рендерить для модерирования письмо перед отправкой, то эту проблему можно решить только костылями: скопировать метод добавления подписи в класс отрисовки письма или добавить метод отрисовки в сервис отправки почты, или еще что-нибудь в этом духе. Оба решения - катастрофа для кода в проекте.

Потому что сервис отправки почты должен заниматься только отправкой почты и ничем другим. Конечно же, отправка почты - это размытое определение, но в него точно не входит корректировка содержания письма. Необходимо формировать сообщение заранее.

Создавая private метод, нужно подумать, действительно ли его место в этом классе

Это можно сделать, например, с помощью декоратора:

class SignedMessage {
    public SignedMessage(Message origin) { ... }
}

...

MailingService mailingService;
Message message;

...

mailingService.sendMail(new SignedMessage(message));

Существуют много примеров private методов, которые не нарушают SRP, но в своей практике я вижу очень часто приватный код, занимающийся совершенно не делами сервиса, в котором находится. Создавая приватный метод, нужно подумать, действительно ли его место в этом классе?