1 /*
2 kmime_message.cpp
3
4 KMime, the KDE Internet mail/usenet news message library.
5 SPDX-FileCopyrightText: 2001 the KMime authors.
6 See file AUTHORS for details
7
8 SPDX-License-Identifier: LGPL-2.0-or-later
9 */
10
11 #include "kmime_message.h"
12 #include "kmime_util_p.h"
13
14 using namespace KMime;
15
16 namespace KMime
17 {
18
Message()19 Message::Message() : Content()
20 {
21 }
22
~Message()23 Message::~Message()
24 {
25 }
26
assembleHeaders()27 QByteArray Message::assembleHeaders()
28 {
29 // Create the mandatory fields (RFC5322) if they do not exist already.
30 date(true);
31 from(true);
32
33 // Make sure the mandatory MIME-Version field (RFC2045) is present and valid.
34 auto *mimeVersion = header<Headers::MIMEVersion>(true);
35 mimeVersion->from7BitString("1.0");
36
37 // Assemble all header fields.
38 return Content::assembleHeaders();
39 }
40
mainBodyPart(const QByteArray & type)41 Content *Message::mainBodyPart(const QByteArray &type)
42 {
43 KMime::Content *c = this;
44 while (c) {
45 // not a multipart message
46 const KMime::Headers::ContentType *const contentType = c->contentType();
47 if (!contentType->isMultipart()) {
48 if (contentType->mimeType() == type || type.isEmpty()) {
49 return c;
50 }
51 return nullptr;
52 }
53
54 // empty multipart
55 if (c->contents().isEmpty()) {
56 return nullptr;
57 }
58
59 // multipart/alternative
60 if (contentType->subType() == "alternative") {
61 if (type.isEmpty()) {
62 return c->contents().at(0);
63 }
64 const auto contents = c->contents();
65 for (Content *c1 : contents) {
66 if (c1->contentType()->mimeType() == type) {
67 return c1;
68 }
69 }
70 return nullptr;
71 }
72
73 c = c->contents().at(0);
74 }
75
76 return nullptr;
77 }
78
mimeType()79 QString Message::mimeType()
80 {
81 return QStringLiteral("message/rfc822");
82 }
83
84 // @cond PRIVATE
85 #define kmime_mk_header_accessor( type, method ) \
86 Headers::type *Message::method( bool create ) { \
87 return header<Headers::type>( create ); \
88 }
89
90 kmime_mk_header_accessor(MessageID, messageID)
91 kmime_mk_header_accessor(Subject, subject)
92 kmime_mk_header_accessor(Date, date)
93 kmime_mk_header_accessor(Organization, organization)
94 kmime_mk_header_accessor(From, from)
95 kmime_mk_header_accessor(ReplyTo, replyTo)
96 kmime_mk_header_accessor(To, to)
97 kmime_mk_header_accessor(Cc, cc)
98 kmime_mk_header_accessor(Bcc, bcc)
99 kmime_mk_header_accessor(References, references)
100 kmime_mk_header_accessor(UserAgent, userAgent)
101 kmime_mk_header_accessor(InReplyTo, inReplyTo)
102 kmime_mk_header_accessor(Sender, sender)
103
104 #undef kmime_mk_header_accessor
105 // @endcond
106
107 }
108
109