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 if ( !c->contentType()->isMultipart() ) {
00107 if ( c->contentType()->mimeType() == type || type.isEmpty() ) {
00108 return c;
00109 }
00110 return 0;
00111 }
00112
00113
00114 if ( c->contents().count() == 0 ) {
00115 return 0;
00116 }
00117
00118
00119 if ( c->contentType()->subType() == "alternative" ) {
00120 if ( type.isEmpty() ) {
00121 return c->contents().first();
00122 }
00123 foreach ( Content *c1, c->contents() ) {
00124 if ( c1->contentType()->mimeType() == type ) {
00125 return c1;
00126 }
00127 }
00128 return 0;
00129 }
00130
00131 c = c->contents().first();
00132 }
00133
00134 return 0;
00135 }
00136
00137 QString Message::mimeType()
00138 {
00139 return QLatin1String( "message/rfc822" );
00140 }
00141
00142
00143
00144 #define kmime_mk_header_accessor( type, method ) \
00145 Headers::type *Message::method( bool create ) { \
00146 return header<Headers::type>( create ); \
00147 }
00148
00149 kmime_mk_header_accessor( MessageID, messageID )
00150 kmime_mk_header_accessor( Subject, subject )
00151 kmime_mk_header_accessor( Date, date )
00152 kmime_mk_header_accessor( Organization, organization )
00153 kmime_mk_header_accessor( From, from )
00154 kmime_mk_header_accessor( ReplyTo, replyTo )
00155 kmime_mk_header_accessor( To, to )
00156 kmime_mk_header_accessor( Cc, cc )
00157 kmime_mk_header_accessor( Bcc, bcc )
00158 kmime_mk_header_accessor( References, references )
00159 kmime_mk_header_accessor( UserAgent, userAgent )
00160 kmime_mk_header_accessor( InReplyTo, inReplyTo )
00161 kmime_mk_header_accessor( Sender, sender )
00162
00163 #undef kmime_mk_header_accessor
00164
00165
00166 }
00167