prepareReplyToMessage static method
MessageBuilder
prepareReplyToMessage(
- MimeMessage originalMessage,
- MailAddress from, {
- bool replyAll = true,
- bool quoteOriginalText = false,
- bool preferPlainText = false,
- String replyHeaderTemplate = MailConventions.defaultReplyHeaderTemplate,
- String defaultReplyAbbreviation = MailConventions.defaultReplyAbbreviation,
- bool replyToSimplifyReferences = false,
- List<
MailAddress> ? aliases, - bool handlePlusAliases = false,
- HeaderEncoding subjectEncoding = HeaderEncoding.Q,
Prepares to create a reply to the given originalMessage
to be send by the user specifed in from
.
Set replyAll
to false in case the reply should only be done to the sender of the message and not to other recipients
Set quoteOriginalText
to true in case the original plain and html texts should be added to the generated message.
Set preferPlainText
and quoteOriginalText
to true in case only plain text should be quoted.
You can also specify a custom replyHeaderTemplate
, which is only used when quoteOriginalText
has been set to true. The default replyHeaderTemplate is 'On
Implementation
static MessageBuilder prepareReplyToMessage(
MimeMessage originalMessage, MailAddress from,
{bool replyAll = true,
bool quoteOriginalText = false,
bool preferPlainText = false,
String replyHeaderTemplate = MailConventions.defaultReplyHeaderTemplate,
String defaultReplyAbbreviation =
MailConventions.defaultReplyAbbreviation,
bool replyToSimplifyReferences = false,
List<MailAddress>? aliases,
bool handlePlusAliases = false,
HeaderEncoding subjectEncoding = HeaderEncoding.Q}) {
String? subject;
final originalSubject = originalMessage.decodeSubject();
if (originalSubject != null) {
subject = createReplySubject(originalSubject,
defaultReplyAbbreviation: defaultReplyAbbreviation);
}
var to = originalMessage.to ?? [];
var cc = originalMessage.cc;
final replyTo = originalMessage.decodeSender();
List<MailAddress> senders;
if (aliases?.isNotEmpty ?? false) {
senders = [from, ...aliases!];
} else {
senders = [from];
}
var newSender = MailAddress.getMatch(senders, replyTo,
handlePlusAliases: handlePlusAliases,
removeMatch: true,
useMatchPersonalName: true);
newSender ??= MailAddress.getMatch(senders, to,
handlePlusAliases: handlePlusAliases, removeMatch: true);
newSender ??= MailAddress.getMatch(senders, cc,
handlePlusAliases: handlePlusAliases, removeMatch: true);
if (newSender != null) {
from = newSender;
}
if (replyAll) {
to.insertAll(0, replyTo);
} else {
if (replyTo.isNotEmpty) {
to = [...replyTo];
}
cc = null;
}
final builder = MessageBuilder()
..subject = subject
..subjectEncoding = subjectEncoding
..originalMessage = originalMessage
..from = [from]
..to = to
..cc = cc
..replyToSimplifyReferences = replyToSimplifyReferences;
if (quoteOriginalText) {
final replyHeader = fillTemplate(replyHeaderTemplate, originalMessage);
final plainText = originalMessage.decodeTextPlainPart();
final quotedPlainText = quotePlainText(replyHeader, plainText);
final decodedHtml = originalMessage.decodeTextHtmlPart();
if (preferPlainText || decodedHtml == null) {
builder.text = quotedPlainText;
} else {
builder.setContentType(MediaSubtype.multipartAlternative.mediaType);
builder.addTextPlain(quotedPlainText);
final quotedHtml = '<blockquote><br/>' +
replyHeader +
'<br/>' +
decodedHtml +
'</blockquote>';
builder.addTextHtml(quotedHtml);
}
}
return builder;
}