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