12 #include <sys/types.h> 14 #include <mimelib/string.h> 15 #include "kmmsgbase.h" 18 #include <kmime_mdn.h> 20 #include<libemailfunctions/email.h> 36 class KMForwardDigestCommand;
43 typedef TQValueList<Address> AddressList;
44 typedef TQValueList<AddrSpec> AddrSpecList;
60 enum ReplyStrategy { ReplySmart = 0,
68 class KMMessage:
public KMMsgBase,
public KMail::ISubject
70 friend class ::KMForwardDigestCommand;
74 using KMMsgBase::parent;
75 using KMMsgBase::setParent;
76 using KMMsgBase::enableUndo;
77 using KMMsgBase::setEnableUndo;
78 using KMMsgBase::isRead;
79 using KMMsgBase::isUnread;
80 using KMMsgBase::isNew;
81 using KMMsgBase::isOld;
82 using KMMsgBase::isWatched;
83 using KMMsgBase::isIgnored;
84 using KMMsgBase::setEncryptionStateChar;
85 using KMMsgBase::setSignatureStateChar;
101 #if 0 // currently unused 116 const KMMsgBase & toMsgBase()
const {
return *
this; }
119 bool isMessage()
const;
124 bool isUrgent()
const;
132 void setUnencryptedMsg(
KMMessage* unencrypted );
153 void del() { setStatus(KMMsgStatusDeleted); }
156 void undel() { setStatus(KMMsgStatusOld); }
159 void touch() { setStatus(KMMsgStatusOld); }
164 KMMessage* createReply( KMail::ReplyStrategy replyStrategy = KMail::ReplySmart,
165 TQString selection=TQString(),
bool noQuote =
false,
166 bool allowDecryption =
true,
167 const TQString &tmpl = TQString(),
168 const TQString &originatingAccount = TQString() );
177 KMMessage* createRedirect(
const TQString &toStr );
180 TQCString createForwardBody();
185 KMMessage* createForward(
const TQString &tmpl = TQString() );
190 KMMessage* createDeliveryReceipt()
const;
205 KMMessage* createMDN( KMime::MDN::ActionMode a,
206 KMime::MDN::DispositionType d,
208 TQValueList<KMime::MDN::DispositionModifier> m=TQValueList<KMime::MDN::DispositionModifier>() );
211 void sanitizeHeaders(
const TQStringList& whiteList = TQStringList() );
214 void fromDwString(
const DwString& str,
bool setStatus=
false);
215 void fromString(
const TQCString& str,
bool setStatus=
false);
216 void fromByteArray(
const TQByteArray & ba,
bool setStatus=
false);
222 const DwString& asDwString()
const;
223 const DwMessage *asDwMessage();
232 TQCString asString()
const;
238 TQByteArray asSendableString()
const;
244 TQCString headerAsSendableString()
const;
249 void removePrivateHeaderFields();
252 DwMediaType& dwContentType();
255 TQString headerAsString()
const;
261 void parseTextStringFromDwPart( partNode * root,
262 TQCString& parsedString,
263 const TQTextCodec*& codec,
264 bool& isHTML )
const;
269 void initHeader(uint identity=0);
273 void initFromMessage(
const KMMessage *msg,
bool idHeaders =
true);
280 uint identityUoid()
const;
284 void applyIdentity( uint
id );
288 void cleanupHeader();
295 void setAutomaticFields(
bool isMultipart=
false);
298 TQString dateStr()
const;
301 TQCString dateShortStr()
const;
302 TQString dateIsoStr()
const;
304 void setDate(
const TQCString& str);
305 void setDate(time_t aUnixTime);
312 void setTo(
const TQString& aStr);
313 TQString toStrip()
const;
316 TQString replyTo()
const;
317 void setReplyTo(
const TQString &aStr );
322 void setCc(
const TQString &aStr );
323 TQString ccStrip()
const;
326 TQString bcc()
const;
327 void setBcc(
const TQString &aStr );
330 TQString fcc()
const;
331 void setFcc(
const TQString &aStr );
334 TQString
drafts()
const {
return mDrafts; }
335 void setDrafts(
const TQString &aStr );
339 void setTemplates(
const TQString &aStr );
342 TQString from()
const;
343 void setFrom(
const TQString& aStr);
344 TQString fromStrip()
const;
348 TQString sender()
const;
353 TQString who()
const;
356 TQString subject()
const;
357 void setSubject(
const TQString& aStr);
363 TQString xmark()
const;
364 void setXMark(
const TQString& aStr);
367 TQString replyToId()
const;
368 void setReplyToId(
const TQString& aStr);
369 TQString replyToIdMD5()
const;
385 TQString replyToAuxIdMD5()
const;
391 TQString strippedSubjectMD5()
const;
403 static KPIM::EmailParseResult isValidEmailAddressList(
const TQString& aStr,
404 TQString& brokenAddress );
410 TQString subjectMD5()
const;
413 bool subjectIsPrefixed()
const;
416 TQString msgId()
const;
417 void setMsgId(
const TQString& aStr);
418 TQString msgIdMD5()
const;
421 TQString references()
const;
422 void setReferences(
const TQCString& aStr);
425 TQCString id()
const;
431 void setMsgSerNum(
unsigned long newMsgSerNum = 0);
437 TQString headerField(
const TQCString& name)
const;
439 enum HeaderFieldType { Unstructured, Structured, Address };
445 void setHeaderField(
const TQCString& name,
const TQString& value,
446 HeaderFieldType type = Unstructured,
447 bool prepend =
false );
450 TQStringList headerFields(
const TQCString& name )
const;
456 TQCString rawHeaderField(
const TQCString & name )
const;
461 TQValueList<TQCString> rawHeaderFields(
const TQCString & field )
const;
464 static KMime::Types::AddressList splitAddrField(
const TQCString & str );
469 KMime::Types::AddressList headerAddrField(
const TQCString& name)
const;
470 KMime::Types::AddrSpecList extractAddrSpecs(
const TQCString & headerNames )
const;
473 void removeHeaderField(
const TQCString& name);
476 void removeHeaderFields(
const TQCString& name);
481 TQCString typeStr()
const;
483 void setTypeStr(
const TQCString& aStr);
484 void setType(
int aType);
486 TQCString subtypeStr()
const;
488 void setSubtypeStr(
const TQCString& aStr);
489 void setSubtype(
int aSubtype);
491 static void setDwMediaTypeParam( DwMediaType &mType,
492 const TQCString& attr,
493 const TQCString& val );
495 void setContentTypeParam(
const TQCString& attr,
const TQCString& val);
500 DwHeaders& headers()
const;
506 void setNeedsAssembly();
512 void assembleIfNeeded();
522 TQCString contentTransferEncodingStr()
const;
523 int contentTransferEncoding( DwEntity *entity = 0 )
const;
524 void setContentTransferEncodingStr(
const TQCString& cteString, DwEntity *entity = 0 );
525 void setContentTransferEncoding(
int cte, DwEntity *entity = 0 );
531 TQCString
cteStr()
const {
return contentTransferEncodingStr(); }
532 int cte( DwEntity *entity = 0 )
const {
return contentTransferEncoding( entity ); }
533 void setCteStr(
const TQCString& aStr, DwEntity *entity = 0 ) {
534 setContentTransferEncodingStr( aStr, entity );
536 void setCte(
int aCte, DwEntity *entity = 0 ) {
537 setContentTransferEncoding( aCte, entity );
547 void setBodyFromUnicode(
const TQString & str, DwEntity *entity = 0 );
551 TQString bodyToUnicode(
const TQTextCodec* codec=0)
const;
554 TQCString body()
const;
557 void setBody(
const TQCString& aStr);
558 void setBody(
const DwString& aStr);
559 void setBody(
const char* aStr);
562 void setMultiPartBody(
const TQCString & aStr );
573 void setBodyEncoded(
const TQCString& aStr, DwEntity *entity = 0 );
574 void setBodyEncodedBinary(
const TQByteArray& aStr, DwEntity *entity = 0 );
579 static TQValueList<int> determineAllowedCtes(
const KMime::CharFreq& cf,
596 void setBodyAndGuessCte(
const TQByteArray& aBuf, TQValueList<int>& allowedCte,
597 bool allow8Bit =
false,
598 bool willBeSigned =
false,
599 DwEntity *entity = 0 );
601 void setBodyAndGuessCte(
const TQCString& aBuf,
602 TQValueList<int>& allowedCte,
603 bool allow8Bit =
false,
604 bool willBeSigned =
false,
605 DwEntity *entity = 0 );
610 TQCString bodyDecoded()
const;
611 TQByteArray bodyDecodedBinary()
const;
615 int numBodyParts()
const;
619 DwBodyPart * findDwBodyPart(
int type,
int subtype )
const;
623 DwBodyPart * findDwBodyPart(
const TQCString& type,
const TQCString& subtype )
const;
627 DwBodyPart* findDwBodyPart( DwBodyPart* part,
const TQString & partSpecifier );
631 DwBodyPart * dwBodyPart(
int aIdx )
const;
635 int partNumber( DwBodyPart * aDwBodyPart )
const;
639 DwBodyPart * getFirstDwBodyPart()
const;
640 DwMessage * getTopLevelPart()
const {
return mMsg; }
645 static void bodyPart(DwBodyPart* aDwBodyPart, KMMessagePart* aPart,
646 bool withBody =
true );
651 void bodyPart(
int aIdx, KMMessagePart* aPart)
const;
654 DwBodyPart* createDWBodyPart(
const KMMessagePart* aPart);
657 void addDwBodyPart(DwBodyPart * aDwPart);
660 void addBodyPart(
const KMMessagePart* aPart);
663 void deleteBodyParts();
669 bool deleteBodyPart(
int partIndex );
673 void setStatusFields();
679 static TQString generateMessageId(
const TQString& addr );
686 static TQCString html2source(
const TQCString & src );
690 static TQString encodeMailtoUrl(
const TQString& str );
694 static TQString decodeMailtoUrl(
const TQString& url );
702 static TQCString stripEmailAddr(
const TQCString& emailAddr);
706 static TQString stripEmailAddr(
const TQString& emailAddr);
713 static TQString quoteHtmlChars(
const TQString& str,
714 bool removeLineBreaks =
false );
720 static TQString emailAddrAsAnchor(
const TQString& emailAddr,
721 bool stripped=
true,
const TQString& cssStyle = TQString(),
bool link =
true);
726 static TQStringList stripAddressFromAddressList(
const TQString& address,
727 const TQStringList& addresses );
732 static TQStringList stripMyAddressesFromAddressList(
const TQStringList& list );
736 static bool addressIsInAddressList(
const TQString& address,
737 const TQStringList& addresses );
742 static TQString expandAliases(
const TQString& recipients );
747 static TQString guessEmailAddressFromLoginName(
const TQString& userName );
755 static TQString smartQuote(
const TQString &msg,
int maxLineLength );
758 static TQCString defaultCharset();
761 static const TQStringList &preferredCharsets();
764 TQString replaceHeadersInString(
const TQString & s )
const;
767 TQCString charset()
const;
777 void setCharset(
const TQCString& charset, DwEntity *entity = 0 );
780 const TQTextCodec * codec()
const;
787 { mDecodeHTML = aDecodeHTML; }
791 static void readConfig();
796 TQCString getRefStr()
const;
800 void setFolderOffset(off_t offs) {
if(mFolderOffset != offs) { mFolderOffset=offs; setDirty(
true); } }
804 void setFileName(
const TQString& file) {
if(mFileName != file) { mFileName=file; setDirty(
true); } }
808 void setOriginatingAccountName(
const TQString& account) {
if(mOriginatingAccountName != account) { mOriginatingAccountName=account; setDirty(
true); } }
814 void setMsgSize(
size_t sz) {
if(mMsgSize != sz) { mMsgSize = sz; setDirty(
true); } }
819 {
return (mMsgLength) ? mMsgLength : mMsgSize; }
820 void setMsgLength(
size_t sz) { mMsgLength = sz; }
823 size_t msgSizeServer()
const;
824 void setMsgSizeServer(
size_t sz);
828 void setUID(ulong uid);
831 KMMsgStatus
status()
const {
return mStatus; }
833 void setStatus(
const KMMsgStatus status,
int idx = -1);
834 void setStatus(
const char* s1,
const char* s2=0) { KMMsgBase::setStatus(s1, s2); }
837 void setEncryptionState(
const KMMsgEncryptionState,
int idx = -1);
840 void setSignatureState(
const KMMsgSignatureState,
int idx = -1);
842 void setMDNSentState( KMMsgMDNSentState status,
int idx=-1 );
850 KMMsgMDNSentState mdnSentState()
const {
return mMDNSentState; }
853 void link(
const KMMessage *aMsg, KMMsgStatus aStatus);
856 void getLink(
int n, ulong *retMsgSerNum, KMMsgStatus *reStatus)
const;
859 TQString formatString(
const TQString&)
const;
862 void updateBodyPart(
const TQString partSpecifier,
const TQByteArray & data);
877 void updateAttachmentState( DwBodyPart *part = 0 );
878 void updateInvitationState();
881 bool transferInProgress()
const;
883 void setTransferInProgress(
bool value,
bool force =
false);
889 TQCString mboxMessageSeparator();
906 TQString asQuotedString(
const TQString & headerStr,
907 const TQString & indentStr,
908 const TQString & selection=TQString(),
909 bool aStripSignature=
true,
910 bool allowDecryption=
true)
const;
914 TQString asPlainText(
bool stripSignature,
bool allowDecryption )
const;
922 TQString asPlainTextFromObjectTree( partNode *root,
bool stripSignature,
923 bool allowDecryption )
const;
933 void setMsgInfo( KMMsgInfo* msgInfo ) { mMsgInfo = msgInfo; }
938 bool isBeingParsed()
const {
return mIsParsed; }
939 void setIsBeingParsed(
bool t ) { mIsParsed = t; }
942 void deleteWhenUnused();
944 DwBodyPart* findPart(
int index );
949 void init( DwMessage* aMsg = 0 );
953 DwBodyPart* findPartInternal( DwEntity* root,
int index,
int &accu );
957 mutable DwMessage* mMsg;
958 mutable bool mNeedsAssembly :1;
960 bool mReadyToShow :1;
963 static const KMail::HeaderStrategy * sHeaderStrategy;
964 static TQString sForwardStr;
965 const TQTextCodec * mOverrideCodec;
968 TQString mOriginatingAccountName;
970 size_t mMsgSize, mMsgLength;
972 KMMsgEncryptionState mEncryptionState;
973 KMMsgSignatureState mSignatureState;
974 KMMsgMDNSentState mMDNSentState;
976 DwBodyPart* mLastUpdated;
979 static TQValueList<KMMessage*> sPendingDeletes;
KMMessage * unencryptedMsg() const
Returns an unencrypted copy of this message or 0 if none exists.
A FolderStorage with an index for faster access to often used message properties. ...
TQCString cteStr() const
Cte is short for ContentTransferEncoding.
void del()
Mark the message as deleted.
bool readyToShow() const
Return if the message is ready to be shown.
KMMsgBase & toMsgBase()
Get KMMsgBase for this object.
TQString templates() const
Get or set the 'Templates' folder.
TQString fileName() const
Get/set filename in mail folder.
TQString drafts() const
Get or set the 'Drafts' folder.
KMMsgStatus status() const
Status of the message.
void setComplete(bool v)
Set if the message is a complete message.
KMMsgInfo * msgInfo()
Get the KMMsgInfo object that was set with setMsgInfo().
void setMsgInfo(KMMsgInfo *msgInfo)
Set the KMMsgInfo object corresponding to this message.
void setReadyToShow(bool v)
Set if the message is ready to be shown.
void touch()
Touch the message - mark it as read.
void setCursorPos(int pos)
Set cursor position as offset from message start.
off_t folderOffset() const
Get/set offset in mail folder.
void initStrippedSubjectMD5()
Calculate strippedSubject.
bool isComplete() const
Return true if the complete message is available without referring to the backing store...
size_t msgSize() const
Get/set size of message in the folder including the whole header in bytes.
KMMessage * takeUnencryptedMsg()
Returns an unencrypted copy of this message or 0 if none exists.
void setDecodeHTML(bool aDecodeHTML)
Allow decoding of HTML for quoting.
KMMsgEncryptionState encryptionState() const
Encryption status of the message.
DwBodyPart * lastUpdatedPart()
Returns the last DwBodyPart that was updated.
void undel()
Undelete the message.
KMMsgSignatureState signatureState() const
Signature status of the message.
int getCursorPos()
Get stored cursor position.
size_t msgLength() const
Unlike the above function this works also, if the message is not in a folder.
void setOverrideCodec(const TQTextCodec *codec)
Set the charset the user selected for the message to display.
bool hasUnencryptedMsg() const
Returns TRUE if the message contains an unencrypted copy of itself.
TQString originatingAccountName() const
Get/set originating account name.