00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024 #include "kmime_message.h"
00025 #include "kmime_message_p.h"
00026 #include "kmime_util_p.h"
00027
00028 #include <KGlobal>
00029
00030 using namespace KMime;
00031
00032 namespace KMime {
00033
00034 Message::Message()
00035 : Content( new MessagePrivate( this ) )
00036 {
00037 }
00038
00039 Message::Message(MessagePrivate * d)
00040 : Content( d )
00041 {
00042 }
00043
00044 Message::~Message()
00045 {
00046 }
00047
00048 void Message::parse()
00049 {
00050
00051 Content::parse();
00052 }
00053
00054 QByteArray Message::assembleHeaders()
00055 {
00056
00057 date( true );
00058 from( true );
00059
00060
00061 Headers::MIMEVersion *mimeVersion = header<Headers::MIMEVersion>( true );
00062 mimeVersion->from7BitString( "1.0" );
00063
00064
00065 return Content::assembleHeaders();
00066 }
00067
00068 void Message::clear()
00069 {
00070
00071 Content::clear();
00072 }
00073
00074 Headers::Base *Message::getHeaderByType( const char *type )
00075 {
00076
00077 return headerByType( type );
00078 }
00079
00080 Headers::Base *Message::headerByType( const char *type )
00081 {
00082
00083 return Content::headerByType( type );
00084 }
00085
00086 void Message::setHeader( Headers::Base *h )
00087 {
00088
00089 Content::setHeader( h );
00090 }
00091
00092 bool Message::removeHeader( const char *type )
00093 {
00094
00095 return Content::removeHeader( type );
00096 }
00097
00098 bool Message::isTopLevel() const
00099 {
00100 return Content::isTopLevel();
00101 }
00102
00103 Content *Message::mainBodyPart( const QByteArray &type )
00104 {
00105 KMime::Content *c = this;
00106 while ( c ) {
00107
00108 const KMime::Headers::ContentType * const contentType = c->contentType();
00109 if ( !contentType->isMultipart() ) {
00110 if ( contentType->mimeType() == type || type.isEmpty() ) {
00111 return c;
00112 }
00113 return 0;
00114 }
00115
00116
00117 if ( c->contents().count() == 0 ) {
00118 return 0;
00119 }
00120
00121
00122 if ( contentType->subType() == "alternative" ) {
00123 if ( type.isEmpty() ) {
00124 return c->contents().first();
00125 }
00126 foreach ( Content *c1, c->contents() ) {
00127 if ( c1->contentType()->mimeType() == type ) {
00128 return c1;
00129 }
00130 }
00131 return 0;
00132 }
00133
00134 c = c->contents().first();
00135 }
00136
00137 return 0;
00138 }
00139
00140 QString Message::mimeType()
00141 {
00142 static const QString &message_rfc822 = KGlobal::staticQString( QLatin1String( "message/rfc822" ) );
00143 return message_rfc822;
00144 }
00145
00146
00147
00148 #define kmime_mk_header_accessor( type, method ) \
00149 Headers::type *Message::method( bool create ) { \
00150 return header<Headers::type>( create ); \
00151 }
00152
00153 kmime_mk_header_accessor( MessageID, messageID )
00154 kmime_mk_header_accessor( Subject, subject )
00155 kmime_mk_header_accessor( Date, date )
00156 kmime_mk_header_accessor( Organization, organization )
00157 kmime_mk_header_accessor( From, from )
00158 kmime_mk_header_accessor( ReplyTo, replyTo )
00159 kmime_mk_header_accessor( To, to )
00160 kmime_mk_header_accessor( Cc, cc )
00161 kmime_mk_header_accessor( Bcc, bcc )
00162 kmime_mk_header_accessor( References, references )
00163 kmime_mk_header_accessor( UserAgent, userAgent )
00164 kmime_mk_header_accessor( InReplyTo, inReplyTo )
00165 kmime_mk_header_accessor( Sender, sender )
00166
00167 #undef kmime_mk_header_accessor
00168
00169
00170 }
00171