/*
 * DO NOT EDIT.  THIS FILE IS GENERATED FROM nsIMsgSend.idl
 */

#ifndef __gen_nsIMsgSend_h__
#define __gen_nsIMsgSend_h__


#ifndef __gen_nsISupports_h__
#include "nsISupports.h"
#endif

#ifndef __gen_nsrootidl_h__
#include "nsrootidl.h"
#endif

#ifndef __gen_nsIMsgIdentity_h__
#include "nsIMsgIdentity.h"
#endif

#ifndef __gen_nsIMsgCompFields_h__
#include "nsIMsgCompFields.h"
#endif

#ifndef __gen_nsIMsgSendListener_h__
#include "nsIMsgSendListener.h"
#endif

#ifndef __gen_nsIMsgSendReport_h__
#include "nsIMsgSendReport.h"
#endif

#ifndef __gen_domstubs_h__
#include "domstubs.h"
#endif

#ifndef __gen_nsIPrompt_h__
#include "nsIPrompt.h"
#endif

#ifndef __gen_MailNewsTypes2_h__
#include "MailNewsTypes2.h"
#endif

#ifndef __gen_nsIMsgComposeParams_h__
#include "nsIMsgComposeParams.h"
#endif

/* For IDL files that don't want to include root IDL files. */
#ifndef NS_NO_VTABLE
#define NS_NO_VTABLE
#endif
#include "nsIURL.h"
#include "nsStringGlue.h"
class nsIMsgProgress; /* forward declaration */

class nsIURI; /* forward declaration */

class nsIRequest; /* forward declaration */

class nsIMsgDBHdr; /* forward declaration */

class nsIMsgHdr; /* forward declaration */

class nsIDocShell; /* forward declaration */

class nsIFile; /* forward declaration */

class nsILocalFile; /* forward declaration */

class nsIOutputStream; /* forward declaration */

class nsIMsgComposeSecure; /* forward declaration */

class nsIMsgStatusFeedback; /* forward declaration */

class nsIEditor; /* forward declaration */

class nsIArray; /* forward declaration */

typedef PRInt32  nsMsgDeliverMode;


/* starting interface:    nsIMsgAttachmentData */
#define NS_IMSGATTACHMENTDATA_IID_STR "d664fd40-87b6-487f-a01f-c54ab2e29314"

#define NS_IMSGATTACHMENTDATA_IID \
  {0xd664fd40, 0x87b6, 0x487f, \
    { 0xa0, 0x1f, 0xc5, 0x4a, 0xb2, 0xe2, 0x93, 0x14 }}

class NS_NO_VTABLE NS_SCRIPTABLE nsIMsgAttachmentData : public nsISupports {
 public: 

  NS_DECLARE_STATIC_IID_ACCESSOR(NS_IMSGATTACHMENTDATA_IID)

  /* attribute nsIURI url; */
  NS_SCRIPTABLE NS_IMETHOD GetUrl(nsIURI * *aUrl) = 0;
  NS_SCRIPTABLE NS_IMETHOD SetUrl(nsIURI *aUrl) = 0;

  /* attribute ACString desiredType; */
  NS_SCRIPTABLE NS_IMETHOD GetDesiredType(nsACString & aDesiredType) = 0;
  NS_SCRIPTABLE NS_IMETHOD SetDesiredType(const nsACString & aDesiredType) = 0;

  /* attribute ACString realType; */
  NS_SCRIPTABLE NS_IMETHOD GetRealType(nsACString & aRealType) = 0;
  NS_SCRIPTABLE NS_IMETHOD SetRealType(const nsACString & aRealType) = 0;

  /* attribute ACString realEncoding; */
  NS_SCRIPTABLE NS_IMETHOD GetRealEncoding(nsACString & aRealEncoding) = 0;
  NS_SCRIPTABLE NS_IMETHOD SetRealEncoding(const nsACString & aRealEncoding) = 0;

  /* attribute ACString realName; */
  NS_SCRIPTABLE NS_IMETHOD GetRealName(nsACString & aRealName) = 0;
  NS_SCRIPTABLE NS_IMETHOD SetRealName(const nsACString & aRealName) = 0;

  /* attribute ACString description; */
  NS_SCRIPTABLE NS_IMETHOD GetDescription(nsACString & aDescription) = 0;
  NS_SCRIPTABLE NS_IMETHOD SetDescription(const nsACString & aDescription) = 0;

  /* attribute ACString xMacType; */
  NS_SCRIPTABLE NS_IMETHOD GetXMacType(nsACString & aXMacType) = 0;
  NS_SCRIPTABLE NS_IMETHOD SetXMacType(const nsACString & aXMacType) = 0;

  /* attribute ACString xMacCreator; */
  NS_SCRIPTABLE NS_IMETHOD GetXMacCreator(nsACString & aXMacCreator) = 0;
  NS_SCRIPTABLE NS_IMETHOD SetXMacCreator(const nsACString & aXMacCreator) = 0;

};

  NS_DEFINE_STATIC_IID_ACCESSOR(nsIMsgAttachmentData, NS_IMSGATTACHMENTDATA_IID)

/* Use this macro when declaring classes that implement this interface. */
#define NS_DECL_NSIMSGATTACHMENTDATA \
  NS_SCRIPTABLE NS_IMETHOD GetUrl(nsIURI * *aUrl); \
  NS_SCRIPTABLE NS_IMETHOD SetUrl(nsIURI *aUrl); \
  NS_SCRIPTABLE NS_IMETHOD GetDesiredType(nsACString & aDesiredType); \
  NS_SCRIPTABLE NS_IMETHOD SetDesiredType(const nsACString & aDesiredType); \
  NS_SCRIPTABLE NS_IMETHOD GetRealType(nsACString & aRealType); \
  NS_SCRIPTABLE NS_IMETHOD SetRealType(const nsACString & aRealType); \
  NS_SCRIPTABLE NS_IMETHOD GetRealEncoding(nsACString & aRealEncoding); \
  NS_SCRIPTABLE NS_IMETHOD SetRealEncoding(const nsACString & aRealEncoding); \
  NS_SCRIPTABLE NS_IMETHOD GetRealName(nsACString & aRealName); \
  NS_SCRIPTABLE NS_IMETHOD SetRealName(const nsACString & aRealName); \
  NS_SCRIPTABLE NS_IMETHOD GetDescription(nsACString & aDescription); \
  NS_SCRIPTABLE NS_IMETHOD SetDescription(const nsACString & aDescription); \
  NS_SCRIPTABLE NS_IMETHOD GetXMacType(nsACString & aXMacType); \
  NS_SCRIPTABLE NS_IMETHOD SetXMacType(const nsACString & aXMacType); \
  NS_SCRIPTABLE NS_IMETHOD GetXMacCreator(nsACString & aXMacCreator); \
  NS_SCRIPTABLE NS_IMETHOD SetXMacCreator(const nsACString & aXMacCreator); 

/* Use this macro to declare functions that forward the behavior of this interface to another object. */
#define NS_FORWARD_NSIMSGATTACHMENTDATA(_to) \
  NS_SCRIPTABLE NS_IMETHOD GetUrl(nsIURI * *aUrl) { return _to GetUrl(aUrl); } \
  NS_SCRIPTABLE NS_IMETHOD SetUrl(nsIURI *aUrl) { return _to SetUrl(aUrl); } \
  NS_SCRIPTABLE NS_IMETHOD GetDesiredType(nsACString & aDesiredType) { return _to GetDesiredType(aDesiredType); } \
  NS_SCRIPTABLE NS_IMETHOD SetDesiredType(const nsACString & aDesiredType) { return _to SetDesiredType(aDesiredType); } \
  NS_SCRIPTABLE NS_IMETHOD GetRealType(nsACString & aRealType) { return _to GetRealType(aRealType); } \
  NS_SCRIPTABLE NS_IMETHOD SetRealType(const nsACString & aRealType) { return _to SetRealType(aRealType); } \
  NS_SCRIPTABLE NS_IMETHOD GetRealEncoding(nsACString & aRealEncoding) { return _to GetRealEncoding(aRealEncoding); } \
  NS_SCRIPTABLE NS_IMETHOD SetRealEncoding(const nsACString & aRealEncoding) { return _to SetRealEncoding(aRealEncoding); } \
  NS_SCRIPTABLE NS_IMETHOD GetRealName(nsACString & aRealName) { return _to GetRealName(aRealName); } \
  NS_SCRIPTABLE NS_IMETHOD SetRealName(const nsACString & aRealName) { return _to SetRealName(aRealName); } \
  NS_SCRIPTABLE NS_IMETHOD GetDescription(nsACString & aDescription) { return _to GetDescription(aDescription); } \
  NS_SCRIPTABLE NS_IMETHOD SetDescription(const nsACString & aDescription) { return _to SetDescription(aDescription); } \
  NS_SCRIPTABLE NS_IMETHOD GetXMacType(nsACString & aXMacType) { return _to GetXMacType(aXMacType); } \
  NS_SCRIPTABLE NS_IMETHOD SetXMacType(const nsACString & aXMacType) { return _to SetXMacType(aXMacType); } \
  NS_SCRIPTABLE NS_IMETHOD GetXMacCreator(nsACString & aXMacCreator) { return _to GetXMacCreator(aXMacCreator); } \
  NS_SCRIPTABLE NS_IMETHOD SetXMacCreator(const nsACString & aXMacCreator) { return _to SetXMacCreator(aXMacCreator); } 

/* Use this macro to declare functions that forward the behavior of this interface to another object in a safe way. */
#define NS_FORWARD_SAFE_NSIMSGATTACHMENTDATA(_to) \
  NS_SCRIPTABLE NS_IMETHOD GetUrl(nsIURI * *aUrl) { return !_to ? NS_ERROR_NULL_POINTER : _to->GetUrl(aUrl); } \
  NS_SCRIPTABLE NS_IMETHOD SetUrl(nsIURI *aUrl) { return !_to ? NS_ERROR_NULL_POINTER : _to->SetUrl(aUrl); } \
  NS_SCRIPTABLE NS_IMETHOD GetDesiredType(nsACString & aDesiredType) { return !_to ? NS_ERROR_NULL_POINTER : _to->GetDesiredType(aDesiredType); } \
  NS_SCRIPTABLE NS_IMETHOD SetDesiredType(const nsACString & aDesiredType) { return !_to ? NS_ERROR_NULL_POINTER : _to->SetDesiredType(aDesiredType); } \
  NS_SCRIPTABLE NS_IMETHOD GetRealType(nsACString & aRealType) { return !_to ? NS_ERROR_NULL_POINTER : _to->GetRealType(aRealType); } \
  NS_SCRIPTABLE NS_IMETHOD SetRealType(const nsACString & aRealType) { return !_to ? NS_ERROR_NULL_POINTER : _to->SetRealType(aRealType); } \
  NS_SCRIPTABLE NS_IMETHOD GetRealEncoding(nsACString & aRealEncoding) { return !_to ? NS_ERROR_NULL_POINTER : _to->GetRealEncoding(aRealEncoding); } \
  NS_SCRIPTABLE NS_IMETHOD SetRealEncoding(const nsACString & aRealEncoding) { return !_to ? NS_ERROR_NULL_POINTER : _to->SetRealEncoding(aRealEncoding); } \
  NS_SCRIPTABLE NS_IMETHOD GetRealName(nsACString & aRealName) { return !_to ? NS_ERROR_NULL_POINTER : _to->GetRealName(aRealName); } \
  NS_SCRIPTABLE NS_IMETHOD SetRealName(const nsACString & aRealName) { return !_to ? NS_ERROR_NULL_POINTER : _to->SetRealName(aRealName); } \
  NS_SCRIPTABLE NS_IMETHOD GetDescription(nsACString & aDescription) { return !_to ? NS_ERROR_NULL_POINTER : _to->GetDescription(aDescription); } \
  NS_SCRIPTABLE NS_IMETHOD SetDescription(const nsACString & aDescription) { return !_to ? NS_ERROR_NULL_POINTER : _to->SetDescription(aDescription); } \
  NS_SCRIPTABLE NS_IMETHOD GetXMacType(nsACString & aXMacType) { return !_to ? NS_ERROR_NULL_POINTER : _to->GetXMacType(aXMacType); } \
  NS_SCRIPTABLE NS_IMETHOD SetXMacType(const nsACString & aXMacType) { return !_to ? NS_ERROR_NULL_POINTER : _to->SetXMacType(aXMacType); } \
  NS_SCRIPTABLE NS_IMETHOD GetXMacCreator(nsACString & aXMacCreator) { return !_to ? NS_ERROR_NULL_POINTER : _to->GetXMacCreator(aXMacCreator); } \
  NS_SCRIPTABLE NS_IMETHOD SetXMacCreator(const nsACString & aXMacCreator) { return !_to ? NS_ERROR_NULL_POINTER : _to->SetXMacCreator(aXMacCreator); } 

#if 0
/* Use the code below as a template for the implementation class for this interface. */

/* Header file */
class nsMsgAttachmentData : public nsIMsgAttachmentData
{
public:
  NS_DECL_ISUPPORTS
  NS_DECL_NSIMSGATTACHMENTDATA

  nsMsgAttachmentData();

private:
  ~nsMsgAttachmentData();

protected:
  /* additional members */
};

/* Implementation file */
NS_IMPL_ISUPPORTS1(nsMsgAttachmentData, nsIMsgAttachmentData)

nsMsgAttachmentData::nsMsgAttachmentData()
{
  /* member initializers and constructor code */
}

nsMsgAttachmentData::~nsMsgAttachmentData()
{
  /* destructor code */
}

/* attribute nsIURI url; */
NS_IMETHODIMP nsMsgAttachmentData::GetUrl(nsIURI * *aUrl)
{
    return NS_ERROR_NOT_IMPLEMENTED;
}
NS_IMETHODIMP nsMsgAttachmentData::SetUrl(nsIURI *aUrl)
{
    return NS_ERROR_NOT_IMPLEMENTED;
}

/* attribute ACString desiredType; */
NS_IMETHODIMP nsMsgAttachmentData::GetDesiredType(nsACString & aDesiredType)
{
    return NS_ERROR_NOT_IMPLEMENTED;
}
NS_IMETHODIMP nsMsgAttachmentData::SetDesiredType(const nsACString & aDesiredType)
{
    return NS_ERROR_NOT_IMPLEMENTED;
}

/* attribute ACString realType; */
NS_IMETHODIMP nsMsgAttachmentData::GetRealType(nsACString & aRealType)
{
    return NS_ERROR_NOT_IMPLEMENTED;
}
NS_IMETHODIMP nsMsgAttachmentData::SetRealType(const nsACString & aRealType)
{
    return NS_ERROR_NOT_IMPLEMENTED;
}

/* attribute ACString realEncoding; */
NS_IMETHODIMP nsMsgAttachmentData::GetRealEncoding(nsACString & aRealEncoding)
{
    return NS_ERROR_NOT_IMPLEMENTED;
}
NS_IMETHODIMP nsMsgAttachmentData::SetRealEncoding(const nsACString & aRealEncoding)
{
    return NS_ERROR_NOT_IMPLEMENTED;
}

/* attribute ACString realName; */
NS_IMETHODIMP nsMsgAttachmentData::GetRealName(nsACString & aRealName)
{
    return NS_ERROR_NOT_IMPLEMENTED;
}
NS_IMETHODIMP nsMsgAttachmentData::SetRealName(const nsACString & aRealName)
{
    return NS_ERROR_NOT_IMPLEMENTED;
}

/* attribute ACString description; */
NS_IMETHODIMP nsMsgAttachmentData::GetDescription(nsACString & aDescription)
{
    return NS_ERROR_NOT_IMPLEMENTED;
}
NS_IMETHODIMP nsMsgAttachmentData::SetDescription(const nsACString & aDescription)
{
    return NS_ERROR_NOT_IMPLEMENTED;
}

/* attribute ACString xMacType; */
NS_IMETHODIMP nsMsgAttachmentData::GetXMacType(nsACString & aXMacType)
{
    return NS_ERROR_NOT_IMPLEMENTED;
}
NS_IMETHODIMP nsMsgAttachmentData::SetXMacType(const nsACString & aXMacType)
{
    return NS_ERROR_NOT_IMPLEMENTED;
}

/* attribute ACString xMacCreator; */
NS_IMETHODIMP nsMsgAttachmentData::GetXMacCreator(nsACString & aXMacCreator)
{
    return NS_ERROR_NOT_IMPLEMENTED;
}
NS_IMETHODIMP nsMsgAttachmentData::SetXMacCreator(const nsACString & aXMacCreator)
{
    return NS_ERROR_NOT_IMPLEMENTED;
}

/* End of implementation class template. */
#endif


/* starting interface:    nsIMsgAttachedFile */
#define NS_IMSGATTACHEDFILE_IID_STR "156bad99-c5a1-425d-8319-3e79c02571d4"

#define NS_IMSGATTACHEDFILE_IID \
  {0x156bad99, 0xc5a1, 0x425d, \
    { 0x83, 0x19, 0x3e, 0x79, 0xc0, 0x25, 0x71, 0xd4 }}

class NS_NO_VTABLE NS_SCRIPTABLE nsIMsgAttachedFile : public nsISupports {
 public: 

  NS_DECLARE_STATIC_IID_ACCESSOR(NS_IMSGATTACHEDFILE_IID)

  /* attribute nsIURI origUrl; */
  NS_SCRIPTABLE NS_IMETHOD GetOrigUrl(nsIURI * *aOrigUrl) = 0;
  NS_SCRIPTABLE NS_IMETHOD SetOrigUrl(nsIURI *aOrigUrl) = 0;

  /* attribute nsILocalFile tmpFile; */
  NS_SCRIPTABLE NS_IMETHOD GetTmpFile(nsILocalFile * *aTmpFile) = 0;
  NS_SCRIPTABLE NS_IMETHOD SetTmpFile(nsILocalFile *aTmpFile) = 0;

  /* attribute ACString type; */
  NS_SCRIPTABLE NS_IMETHOD GetType(nsACString & aType) = 0;
  NS_SCRIPTABLE NS_IMETHOD SetType(const nsACString & aType) = 0;

  /* attribute ACString encoding; */
  NS_SCRIPTABLE NS_IMETHOD GetEncoding(nsACString & aEncoding) = 0;
  NS_SCRIPTABLE NS_IMETHOD SetEncoding(const nsACString & aEncoding) = 0;

  /* attribute ACString description; */
  NS_SCRIPTABLE NS_IMETHOD GetDescription(nsACString & aDescription) = 0;
  NS_SCRIPTABLE NS_IMETHOD SetDescription(const nsACString & aDescription) = 0;

  /* attribute ACString xMacType; */
  NS_SCRIPTABLE NS_IMETHOD GetXMacType(nsACString & aXMacType) = 0;
  NS_SCRIPTABLE NS_IMETHOD SetXMacType(const nsACString & aXMacType) = 0;

  /* attribute ACString xMacCreator; */
  NS_SCRIPTABLE NS_IMETHOD GetXMacCreator(nsACString & aXMacCreator) = 0;
  NS_SCRIPTABLE NS_IMETHOD SetXMacCreator(const nsACString & aXMacCreator) = 0;

  /* attribute ACString realName; */
  NS_SCRIPTABLE NS_IMETHOD GetRealName(nsACString & aRealName) = 0;
  NS_SCRIPTABLE NS_IMETHOD SetRealName(const nsACString & aRealName) = 0;

  /* attribute unsigned long size; */
  NS_SCRIPTABLE NS_IMETHOD GetSize(PRUint32 *aSize) = 0;
  NS_SCRIPTABLE NS_IMETHOD SetSize(PRUint32 aSize) = 0;

  /* attribute unsigned long unprintableCount; */
  NS_SCRIPTABLE NS_IMETHOD GetUnprintableCount(PRUint32 *aUnprintableCount) = 0;
  NS_SCRIPTABLE NS_IMETHOD SetUnprintableCount(PRUint32 aUnprintableCount) = 0;

  /* attribute unsigned long highbitCount; */
  NS_SCRIPTABLE NS_IMETHOD GetHighbitCount(PRUint32 *aHighbitCount) = 0;
  NS_SCRIPTABLE NS_IMETHOD SetHighbitCount(PRUint32 aHighbitCount) = 0;

  /* attribute unsigned long ctlCount; */
  NS_SCRIPTABLE NS_IMETHOD GetCtlCount(PRUint32 *aCtlCount) = 0;
  NS_SCRIPTABLE NS_IMETHOD SetCtlCount(PRUint32 aCtlCount) = 0;

  /* attribute unsigned long nullCount; */
  NS_SCRIPTABLE NS_IMETHOD GetNullCount(PRUint32 *aNullCount) = 0;
  NS_SCRIPTABLE NS_IMETHOD SetNullCount(PRUint32 aNullCount) = 0;

  /* attribute unsigned long maxLineLength; */
  NS_SCRIPTABLE NS_IMETHOD GetMaxLineLength(PRUint32 *aMaxLineLength) = 0;
  NS_SCRIPTABLE NS_IMETHOD SetMaxLineLength(PRUint32 aMaxLineLength) = 0;

};

  NS_DEFINE_STATIC_IID_ACCESSOR(nsIMsgAttachedFile, NS_IMSGATTACHEDFILE_IID)

/* Use this macro when declaring classes that implement this interface. */
#define NS_DECL_NSIMSGATTACHEDFILE \
  NS_SCRIPTABLE NS_IMETHOD GetOrigUrl(nsIURI * *aOrigUrl); \
  NS_SCRIPTABLE NS_IMETHOD SetOrigUrl(nsIURI *aOrigUrl); \
  NS_SCRIPTABLE NS_IMETHOD GetTmpFile(nsILocalFile * *aTmpFile); \
  NS_SCRIPTABLE NS_IMETHOD SetTmpFile(nsILocalFile *aTmpFile); \
  NS_SCRIPTABLE NS_IMETHOD GetType(nsACString & aType); \
  NS_SCRIPTABLE NS_IMETHOD SetType(const nsACString & aType); \
  NS_SCRIPTABLE NS_IMETHOD GetEncoding(nsACString & aEncoding); \
  NS_SCRIPTABLE NS_IMETHOD SetEncoding(const nsACString & aEncoding); \
  NS_SCRIPTABLE NS_IMETHOD GetDescription(nsACString & aDescription); \
  NS_SCRIPTABLE NS_IMETHOD SetDescription(const nsACString & aDescription); \
  NS_SCRIPTABLE NS_IMETHOD GetXMacType(nsACString & aXMacType); \
  NS_SCRIPTABLE NS_IMETHOD SetXMacType(const nsACString & aXMacType); \
  NS_SCRIPTABLE NS_IMETHOD GetXMacCreator(nsACString & aXMacCreator); \
  NS_SCRIPTABLE NS_IMETHOD SetXMacCreator(const nsACString & aXMacCreator); \
  NS_SCRIPTABLE NS_IMETHOD GetRealName(nsACString & aRealName); \
  NS_SCRIPTABLE NS_IMETHOD SetRealName(const nsACString & aRealName); \
  NS_SCRIPTABLE NS_IMETHOD GetSize(PRUint32 *aSize); \
  NS_SCRIPTABLE NS_IMETHOD SetSize(PRUint32 aSize); \
  NS_SCRIPTABLE NS_IMETHOD GetUnprintableCount(PRUint32 *aUnprintableCount); \
  NS_SCRIPTABLE NS_IMETHOD SetUnprintableCount(PRUint32 aUnprintableCount); \
  NS_SCRIPTABLE NS_IMETHOD GetHighbitCount(PRUint32 *aHighbitCount); \
  NS_SCRIPTABLE NS_IMETHOD SetHighbitCount(PRUint32 aHighbitCount); \
  NS_SCRIPTABLE NS_IMETHOD GetCtlCount(PRUint32 *aCtlCount); \
  NS_SCRIPTABLE NS_IMETHOD SetCtlCount(PRUint32 aCtlCount); \
  NS_SCRIPTABLE NS_IMETHOD GetNullCount(PRUint32 *aNullCount); \
  NS_SCRIPTABLE NS_IMETHOD SetNullCount(PRUint32 aNullCount); \
  NS_SCRIPTABLE NS_IMETHOD GetMaxLineLength(PRUint32 *aMaxLineLength); \
  NS_SCRIPTABLE NS_IMETHOD SetMaxLineLength(PRUint32 aMaxLineLength); 

/* Use this macro to declare functions that forward the behavior of this interface to another object. */
#define NS_FORWARD_NSIMSGATTACHEDFILE(_to) \
  NS_SCRIPTABLE NS_IMETHOD GetOrigUrl(nsIURI * *aOrigUrl) { return _to GetOrigUrl(aOrigUrl); } \
  NS_SCRIPTABLE NS_IMETHOD SetOrigUrl(nsIURI *aOrigUrl) { return _to SetOrigUrl(aOrigUrl); } \
  NS_SCRIPTABLE NS_IMETHOD GetTmpFile(nsILocalFile * *aTmpFile) { return _to GetTmpFile(aTmpFile); } \
  NS_SCRIPTABLE NS_IMETHOD SetTmpFile(nsILocalFile *aTmpFile) { return _to SetTmpFile(aTmpFile); } \
  NS_SCRIPTABLE NS_IMETHOD GetType(nsACString & aType) { return _to GetType(aType); } \
  NS_SCRIPTABLE NS_IMETHOD SetType(const nsACString & aType) { return _to SetType(aType); } \
  NS_SCRIPTABLE NS_IMETHOD GetEncoding(nsACString & aEncoding) { return _to GetEncoding(aEncoding); } \
  NS_SCRIPTABLE NS_IMETHOD SetEncoding(const nsACString & aEncoding) { return _to SetEncoding(aEncoding); } \
  NS_SCRIPTABLE NS_IMETHOD GetDescription(nsACString & aDescription) { return _to GetDescription(aDescription); } \
  NS_SCRIPTABLE NS_IMETHOD SetDescription(const nsACString & aDescription) { return _to SetDescription(aDescription); } \
  NS_SCRIPTABLE NS_IMETHOD GetXMacType(nsACString & aXMacType) { return _to GetXMacType(aXMacType); } \
  NS_SCRIPTABLE NS_IMETHOD SetXMacType(const nsACString & aXMacType) { return _to SetXMacType(aXMacType); } \
  NS_SCRIPTABLE NS_IMETHOD GetXMacCreator(nsACString & aXMacCreator) { return _to GetXMacCreator(aXMacCreator); } \
  NS_SCRIPTABLE NS_IMETHOD SetXMacCreator(const nsACString & aXMacCreator) { return _to SetXMacCreator(aXMacCreator); } \
  NS_SCRIPTABLE NS_IMETHOD GetRealName(nsACString & aRealName) { return _to GetRealName(aRealName); } \
  NS_SCRIPTABLE NS_IMETHOD SetRealName(const nsACString & aRealName) { return _to SetRealName(aRealName); } \
  NS_SCRIPTABLE NS_IMETHOD GetSize(PRUint32 *aSize) { return _to GetSize(aSize); } \
  NS_SCRIPTABLE NS_IMETHOD SetSize(PRUint32 aSize) { return _to SetSize(aSize); } \
  NS_SCRIPTABLE NS_IMETHOD GetUnprintableCount(PRUint32 *aUnprintableCount) { return _to GetUnprintableCount(aUnprintableCount); } \
  NS_SCRIPTABLE NS_IMETHOD SetUnprintableCount(PRUint32 aUnprintableCount) { return _to SetUnprintableCount(aUnprintableCount); } \
  NS_SCRIPTABLE NS_IMETHOD GetHighbitCount(PRUint32 *aHighbitCount) { return _to GetHighbitCount(aHighbitCount); } \
  NS_SCRIPTABLE NS_IMETHOD SetHighbitCount(PRUint32 aHighbitCount) { return _to SetHighbitCount(aHighbitCount); } \
  NS_SCRIPTABLE NS_IMETHOD GetCtlCount(PRUint32 *aCtlCount) { return _to GetCtlCount(aCtlCount); } \
  NS_SCRIPTABLE NS_IMETHOD SetCtlCount(PRUint32 aCtlCount) { return _to SetCtlCount(aCtlCount); } \
  NS_SCRIPTABLE NS_IMETHOD GetNullCount(PRUint32 *aNullCount) { return _to GetNullCount(aNullCount); } \
  NS_SCRIPTABLE NS_IMETHOD SetNullCount(PRUint32 aNullCount) { return _to SetNullCount(aNullCount); } \
  NS_SCRIPTABLE NS_IMETHOD GetMaxLineLength(PRUint32 *aMaxLineLength) { return _to GetMaxLineLength(aMaxLineLength); } \
  NS_SCRIPTABLE NS_IMETHOD SetMaxLineLength(PRUint32 aMaxLineLength) { return _to SetMaxLineLength(aMaxLineLength); } 

/* Use this macro to declare functions that forward the behavior of this interface to another object in a safe way. */
#define NS_FORWARD_SAFE_NSIMSGATTACHEDFILE(_to) \
  NS_SCRIPTABLE NS_IMETHOD GetOrigUrl(nsIURI * *aOrigUrl) { return !_to ? NS_ERROR_NULL_POINTER : _to->GetOrigUrl(aOrigUrl); } \
  NS_SCRIPTABLE NS_IMETHOD SetOrigUrl(nsIURI *aOrigUrl) { return !_to ? NS_ERROR_NULL_POINTER : _to->SetOrigUrl(aOrigUrl); } \
  NS_SCRIPTABLE NS_IMETHOD GetTmpFile(nsILocalFile * *aTmpFile) { return !_to ? NS_ERROR_NULL_POINTER : _to->GetTmpFile(aTmpFile); } \
  NS_SCRIPTABLE NS_IMETHOD SetTmpFile(nsILocalFile *aTmpFile) { return !_to ? NS_ERROR_NULL_POINTER : _to->SetTmpFile(aTmpFile); } \
  NS_SCRIPTABLE NS_IMETHOD GetType(nsACString & aType) { return !_to ? NS_ERROR_NULL_POINTER : _to->GetType(aType); } \
  NS_SCRIPTABLE NS_IMETHOD SetType(const nsACString & aType) { return !_to ? NS_ERROR_NULL_POINTER : _to->SetType(aType); } \
  NS_SCRIPTABLE NS_IMETHOD GetEncoding(nsACString & aEncoding) { return !_to ? NS_ERROR_NULL_POINTER : _to->GetEncoding(aEncoding); } \
  NS_SCRIPTABLE NS_IMETHOD SetEncoding(const nsACString & aEncoding) { return !_to ? NS_ERROR_NULL_POINTER : _to->SetEncoding(aEncoding); } \
  NS_SCRIPTABLE NS_IMETHOD GetDescription(nsACString & aDescription) { return !_to ? NS_ERROR_NULL_POINTER : _to->GetDescription(aDescription); } \
  NS_SCRIPTABLE NS_IMETHOD SetDescription(const nsACString & aDescription) { return !_to ? NS_ERROR_NULL_POINTER : _to->SetDescription(aDescription); } \
  NS_SCRIPTABLE NS_IMETHOD GetXMacType(nsACString & aXMacType) { return !_to ? NS_ERROR_NULL_POINTER : _to->GetXMacType(aXMacType); } \
  NS_SCRIPTABLE NS_IMETHOD SetXMacType(const nsACString & aXMacType) { return !_to ? NS_ERROR_NULL_POINTER : _to->SetXMacType(aXMacType); } \
  NS_SCRIPTABLE NS_IMETHOD GetXMacCreator(nsACString & aXMacCreator) { return !_to ? NS_ERROR_NULL_POINTER : _to->GetXMacCreator(aXMacCreator); } \
  NS_SCRIPTABLE NS_IMETHOD SetXMacCreator(const nsACString & aXMacCreator) { return !_to ? NS_ERROR_NULL_POINTER : _to->SetXMacCreator(aXMacCreator); } \
  NS_SCRIPTABLE NS_IMETHOD GetRealName(nsACString & aRealName) { return !_to ? NS_ERROR_NULL_POINTER : _to->GetRealName(aRealName); } \
  NS_SCRIPTABLE NS_IMETHOD SetRealName(const nsACString & aRealName) { return !_to ? NS_ERROR_NULL_POINTER : _to->SetRealName(aRealName); } \
  NS_SCRIPTABLE NS_IMETHOD GetSize(PRUint32 *aSize) { return !_to ? NS_ERROR_NULL_POINTER : _to->GetSize(aSize); } \
  NS_SCRIPTABLE NS_IMETHOD SetSize(PRUint32 aSize) { return !_to ? NS_ERROR_NULL_POINTER : _to->SetSize(aSize); } \
  NS_SCRIPTABLE NS_IMETHOD GetUnprintableCount(PRUint32 *aUnprintableCount) { return !_to ? NS_ERROR_NULL_POINTER : _to->GetUnprintableCount(aUnprintableCount); } \
  NS_SCRIPTABLE NS_IMETHOD SetUnprintableCount(PRUint32 aUnprintableCount) { return !_to ? NS_ERROR_NULL_POINTER : _to->SetUnprintableCount(aUnprintableCount); } \
  NS_SCRIPTABLE NS_IMETHOD GetHighbitCount(PRUint32 *aHighbitCount) { return !_to ? NS_ERROR_NULL_POINTER : _to->GetHighbitCount(aHighbitCount); } \
  NS_SCRIPTABLE NS_IMETHOD SetHighbitCount(PRUint32 aHighbitCount) { return !_to ? NS_ERROR_NULL_POINTER : _to->SetHighbitCount(aHighbitCount); } \
  NS_SCRIPTABLE NS_IMETHOD GetCtlCount(PRUint32 *aCtlCount) { return !_to ? NS_ERROR_NULL_POINTER : _to->GetCtlCount(aCtlCount); } \
  NS_SCRIPTABLE NS_IMETHOD SetCtlCount(PRUint32 aCtlCount) { return !_to ? NS_ERROR_NULL_POINTER : _to->SetCtlCount(aCtlCount); } \
  NS_SCRIPTABLE NS_IMETHOD GetNullCount(PRUint32 *aNullCount) { return !_to ? NS_ERROR_NULL_POINTER : _to->GetNullCount(aNullCount); } \
  NS_SCRIPTABLE NS_IMETHOD SetNullCount(PRUint32 aNullCount) { return !_to ? NS_ERROR_NULL_POINTER : _to->SetNullCount(aNullCount); } \
  NS_SCRIPTABLE NS_IMETHOD GetMaxLineLength(PRUint32 *aMaxLineLength) { return !_to ? NS_ERROR_NULL_POINTER : _to->GetMaxLineLength(aMaxLineLength); } \
  NS_SCRIPTABLE NS_IMETHOD SetMaxLineLength(PRUint32 aMaxLineLength) { return !_to ? NS_ERROR_NULL_POINTER : _to->SetMaxLineLength(aMaxLineLength); } 

#if 0
/* Use the code below as a template for the implementation class for this interface. */

/* Header file */
class nsMsgAttachedFile : public nsIMsgAttachedFile
{
public:
  NS_DECL_ISUPPORTS
  NS_DECL_NSIMSGATTACHEDFILE

  nsMsgAttachedFile();

private:
  ~nsMsgAttachedFile();

protected:
  /* additional members */
};

/* Implementation file */
NS_IMPL_ISUPPORTS1(nsMsgAttachedFile, nsIMsgAttachedFile)

nsMsgAttachedFile::nsMsgAttachedFile()
{
  /* member initializers and constructor code */
}

nsMsgAttachedFile::~nsMsgAttachedFile()
{
  /* destructor code */
}

/* attribute nsIURI origUrl; */
NS_IMETHODIMP nsMsgAttachedFile::GetOrigUrl(nsIURI * *aOrigUrl)
{
    return NS_ERROR_NOT_IMPLEMENTED;
}
NS_IMETHODIMP nsMsgAttachedFile::SetOrigUrl(nsIURI *aOrigUrl)
{
    return NS_ERROR_NOT_IMPLEMENTED;
}

/* attribute nsILocalFile tmpFile; */
NS_IMETHODIMP nsMsgAttachedFile::GetTmpFile(nsILocalFile * *aTmpFile)
{
    return NS_ERROR_NOT_IMPLEMENTED;
}
NS_IMETHODIMP nsMsgAttachedFile::SetTmpFile(nsILocalFile *aTmpFile)
{
    return NS_ERROR_NOT_IMPLEMENTED;
}

/* attribute ACString type; */
NS_IMETHODIMP nsMsgAttachedFile::GetType(nsACString & aType)
{
    return NS_ERROR_NOT_IMPLEMENTED;
}
NS_IMETHODIMP nsMsgAttachedFile::SetType(const nsACString & aType)
{
    return NS_ERROR_NOT_IMPLEMENTED;
}

/* attribute ACString encoding; */
NS_IMETHODIMP nsMsgAttachedFile::GetEncoding(nsACString & aEncoding)
{
    return NS_ERROR_NOT_IMPLEMENTED;
}
NS_IMETHODIMP nsMsgAttachedFile::SetEncoding(const nsACString & aEncoding)
{
    return NS_ERROR_NOT_IMPLEMENTED;
}

/* attribute ACString description; */
NS_IMETHODIMP nsMsgAttachedFile::GetDescription(nsACString & aDescription)
{
    return NS_ERROR_NOT_IMPLEMENTED;
}
NS_IMETHODIMP nsMsgAttachedFile::SetDescription(const nsACString & aDescription)
{
    return NS_ERROR_NOT_IMPLEMENTED;
}

/* attribute ACString xMacType; */
NS_IMETHODIMP nsMsgAttachedFile::GetXMacType(nsACString & aXMacType)
{
    return NS_ERROR_NOT_IMPLEMENTED;
}
NS_IMETHODIMP nsMsgAttachedFile::SetXMacType(const nsACString & aXMacType)
{
    return NS_ERROR_NOT_IMPLEMENTED;
}

/* attribute ACString xMacCreator; */
NS_IMETHODIMP nsMsgAttachedFile::GetXMacCreator(nsACString & aXMacCreator)
{
    return NS_ERROR_NOT_IMPLEMENTED;
}
NS_IMETHODIMP nsMsgAttachedFile::SetXMacCreator(const nsACString & aXMacCreator)
{
    return NS_ERROR_NOT_IMPLEMENTED;
}

/* attribute ACString realName; */
NS_IMETHODIMP nsMsgAttachedFile::GetRealName(nsACString & aRealName)
{
    return NS_ERROR_NOT_IMPLEMENTED;
}
NS_IMETHODIMP nsMsgAttachedFile::SetRealName(const nsACString & aRealName)
{
    return NS_ERROR_NOT_IMPLEMENTED;
}

/* attribute unsigned long size; */
NS_IMETHODIMP nsMsgAttachedFile::GetSize(PRUint32 *aSize)
{
    return NS_ERROR_NOT_IMPLEMENTED;
}
NS_IMETHODIMP nsMsgAttachedFile::SetSize(PRUint32 aSize)
{
    return NS_ERROR_NOT_IMPLEMENTED;
}

/* attribute unsigned long unprintableCount; */
NS_IMETHODIMP nsMsgAttachedFile::GetUnprintableCount(PRUint32 *aUnprintableCount)
{
    return NS_ERROR_NOT_IMPLEMENTED;
}
NS_IMETHODIMP nsMsgAttachedFile::SetUnprintableCount(PRUint32 aUnprintableCount)
{
    return NS_ERROR_NOT_IMPLEMENTED;
}

/* attribute unsigned long highbitCount; */
NS_IMETHODIMP nsMsgAttachedFile::GetHighbitCount(PRUint32 *aHighbitCount)
{
    return NS_ERROR_NOT_IMPLEMENTED;
}
NS_IMETHODIMP nsMsgAttachedFile::SetHighbitCount(PRUint32 aHighbitCount)
{
    return NS_ERROR_NOT_IMPLEMENTED;
}

/* attribute unsigned long ctlCount; */
NS_IMETHODIMP nsMsgAttachedFile::GetCtlCount(PRUint32 *aCtlCount)
{
    return NS_ERROR_NOT_IMPLEMENTED;
}
NS_IMETHODIMP nsMsgAttachedFile::SetCtlCount(PRUint32 aCtlCount)
{
    return NS_ERROR_NOT_IMPLEMENTED;
}

/* attribute unsigned long nullCount; */
NS_IMETHODIMP nsMsgAttachedFile::GetNullCount(PRUint32 *aNullCount)
{
    return NS_ERROR_NOT_IMPLEMENTED;
}
NS_IMETHODIMP nsMsgAttachedFile::SetNullCount(PRUint32 aNullCount)
{
    return NS_ERROR_NOT_IMPLEMENTED;
}

/* attribute unsigned long maxLineLength; */
NS_IMETHODIMP nsMsgAttachedFile::GetMaxLineLength(PRUint32 *aMaxLineLength)
{
    return NS_ERROR_NOT_IMPLEMENTED;
}
NS_IMETHODIMP nsMsgAttachedFile::SetMaxLineLength(PRUint32 aMaxLineLength)
{
    return NS_ERROR_NOT_IMPLEMENTED;
}

/* End of implementation class template. */
#endif

// Forward declaration
class nsMsgAttachmentHandler;
// Attachment file/URL structures - we're letting libmime use this directly
class nsMsgAttachmentData : public nsIMsgAttachmentData
{
public:
  NS_DECL_NSIMSGATTACHMENTDATA
  NS_DECL_ISUPPORTS
  nsMsgAttachmentData();
  ~nsMsgAttachmentData();
  nsCOMPtr<nsIURI> m_url; // The URL to attach.
  nsCString m_desiredType; // The type to which this document should be
                          // converted.  Legal values are NULL, TEXT_PLAIN
                          // and APPLICATION_POSTSCRIPT (which are macros
                          // defined in net.h); other values are ignored.
  nsCString m_realType;        // The type of the URL if known, otherwise NULL. For example, if 
                          // you were attaching a temp file which was known to contain HTML data, 
                          // you would pass in TEXT_HTML as the real_type, to override whatever type 
                          // the name of the tmp file might otherwise indicate.
  nsCString m_realEncoding;    // Goes along with real_type 
  nsCString m_realName;        // The original name of this document, which will eventually show up in the 
                          // Content-Disposition header. For example, if you had copied a document to a 
                          // tmp file, this would be the original, human-readable name of the document.
  nsCString m_description;      // If you put a string here, it will show up as the Content-Description header.  
                          // This can be any explanatory text; it's not a file name.             
  // Mac-specific data that should show up as optional parameters
  // to the content-type header.
  nsCString m_xMacType;
  nsCString m_xMacCreator;
  PRInt32 m_size;                  // The size of the attachment. May be 0.
  PRBool  m_isExternalAttachment;  // Flag for determining if the attachment is external
  PRBool  m_isDownloaded;          // Flag for determining if the attachment has already been downloaded
  PRBool  m_hasFilename;           // Tells whether the name is provided by us or if it's a Part 1.2-like attachment
};
class nsMsgAttachedFile : public nsIMsgAttachedFile
{
public:
  NS_DECL_NSIMSGATTACHEDFILE
  NS_DECL_ISUPPORTS
  nsMsgAttachedFile();
  ~nsMsgAttachedFile();
  nsCOMPtr<nsIURI> m_origUrl; // Where it came from on the network (or even elsewhere on the local disk.)
  nsCOMPtr<nsILocalFile>  m_tmpFile;    // The tmp file in which the (possibly converted) data now resides.
  nsCString m_type;        // The type of the data in file_name (not necessarily the same as the type of orig_url.)
  nsCString m_encoding;    // Likewise, the encoding of the tmp file. This will be set only if the original 
                            // document had an encoding already; we don't do base64 encoding and so forth until 
                            // it's time to assemble a full MIME message of all parts.
  nsCString m_description;    // For Content-Description header 
  nsCString m_xMacType;    // mac-specific info 
  nsCString m_xMacCreator; // mac-specific info 
  nsCString m_realName;      // The real name of the file. 
  // Some statistics about the data that was written to the file, so that when
  // it comes time to compose a MIME message, we can make an informed decision
  // about what Content-Transfer-Encoding would be best for this attachment.
  // (If it's encoded already, we ignore this information and ship it as-is.)
  PRUint32    m_size;
  PRUint32    m_unprintableCount;
  PRUint32    m_highbitCount;
  PRUint32    m_ctlCount;
  PRUint32    m_nullCount;
  PRUint32    m_maxLineLength;
};

/* starting interface:    nsIMsgSend */
#define NS_IMSGSEND_IID_STR "95b2fafb-1b2a-4cea-8774-72b15f31f428"

#define NS_IMSGSEND_IID \
  {0x95b2fafb, 0x1b2a, 0x4cea, \
    { 0x87, 0x74, 0x72, 0xb1, 0x5f, 0x31, 0xf4, 0x28 }}

class NS_NO_VTABLE NS_SCRIPTABLE nsIMsgSend : public nsISupports {
 public: 

  NS_DECLARE_STATIC_IID_ACCESSOR(NS_IMSGSEND_IID)

  enum { nsMsgDeliverNow = 0 };

  enum { nsMsgQueueForLater = 1 };

  enum { nsMsgSave = 2 };

  enum { nsMsgSaveAs = 3 };

  enum { nsMsgSaveAsDraft = 4 };

  enum { nsMsgSaveAsTemplate = 5 };

  enum { nsMsgSendUnsent = 6 };

  enum { nsMsgDeliverBackground = 8 };

  /* void createAndSendMessage (in nsIEditor aEditor, in nsIMsgIdentity aUserIdentity, in string aAccountKey, in nsIMsgCompFields aFields, in boolean aIsDigest, in boolean aDontDeliver, in nsMsgDeliverMode aMode, in nsIMsgDBHdr aMsgToReplace, in string aBodyType, in string aBody, in unsigned long aBodyLength, in nsIArray aAttachments, in nsIArray aPreloadedAttachments, in nsIDOMWindow aParentWindow, in nsIMsgProgress aProgress, in nsIMsgSendListener aListener, in string aPassword, in AUTF8String aOriginalMsgURI, in MSG_ComposeType aType); */
  NS_SCRIPTABLE NS_IMETHOD CreateAndSendMessage(nsIEditor *aEditor, nsIMsgIdentity *aUserIdentity, const char * aAccountKey, nsIMsgCompFields *aFields, PRBool aIsDigest, PRBool aDontDeliver, nsMsgDeliverMode aMode, nsIMsgDBHdr *aMsgToReplace, const char * aBodyType, const char * aBody, PRUint32 aBodyLength, nsIArray *aAttachments, nsIArray *aPreloadedAttachments, nsIDOMWindow *aParentWindow, nsIMsgProgress *aProgress, nsIMsgSendListener *aListener, const char * aPassword, const nsACString & aOriginalMsgURI, MSG_ComposeType aType) = 0;

  /* void sendMessageFile (in nsIMsgIdentity aUserIdentity, in string aAccountKey, in nsIMsgCompFields aFields, in nsIFile aSendIFile, in boolean aDeleteSendFileOnCompletion, in boolean aDigest_p, in nsMsgDeliverMode aMode, in nsIMsgDBHdr aMsgToReplace, in nsIMsgSendListener aListener, in nsIMsgStatusFeedback aStatusFeedback, in string aPassword); */
  NS_SCRIPTABLE NS_IMETHOD SendMessageFile(nsIMsgIdentity *aUserIdentity, const char * aAccountKey, nsIMsgCompFields *aFields, nsIFile *aSendIFile, PRBool aDeleteSendFileOnCompletion, PRBool aDigest_p, nsMsgDeliverMode aMode, nsIMsgDBHdr *aMsgToReplace, nsIMsgSendListener *aListener, nsIMsgStatusFeedback *aStatusFeedback, const char * aPassword) = 0;

  /* void abort (); */
  NS_SCRIPTABLE NS_IMETHOD Abort(void) = 0;

  /* nsresult fail (in nsresult failure_code, in wstring error_msg); */
  NS_SCRIPTABLE NS_IMETHOD Fail(nsresult failure_code, const PRUnichar * error_msg, nsresult *_retval NS_OUTPARAM) = 0;

  /* void setGUINotificationState (in boolean aEnableFlag); */
  NS_SCRIPTABLE NS_IMETHOD SetGUINotificationState(PRBool aEnableFlag) = 0;

  /* void BeginCryptoEncapsulation (); */
  NS_SCRIPTABLE NS_IMETHOD BeginCryptoEncapsulation(void) = 0;

  /* readonly attribute nsIMsgSendReport sendReport; */
  NS_SCRIPTABLE NS_IMETHOD GetSendReport(nsIMsgSendReport * *aSendReport) = 0;

  /* void notifyListenerOnStartSending (in string aMsgID, in unsigned long aMsgSize); */
  NS_SCRIPTABLE NS_IMETHOD NotifyListenerOnStartSending(const char * aMsgID, PRUint32 aMsgSize) = 0;

  /* void notifyListenerOnProgress (in string aMsgID, in unsigned long aProgress, in unsigned long aProgressMax); */
  NS_SCRIPTABLE NS_IMETHOD NotifyListenerOnProgress(const char * aMsgID, PRUint32 aProgress, PRUint32 aProgressMax) = 0;

  /* void notifyListenerOnStatus (in string aMsgID, in wstring aMsg); */
  NS_SCRIPTABLE NS_IMETHOD NotifyListenerOnStatus(const char * aMsgID, const PRUnichar * aMsg) = 0;

  /* void notifyListenerOnStopSending (in string aMsgID, in nsresult aStatus, in wstring aMsg, in nsIFile returnFile); */
  NS_SCRIPTABLE NS_IMETHOD NotifyListenerOnStopSending(const char * aMsgID, nsresult aStatus, const PRUnichar * aMsg, nsIFile *returnFile) = 0;

  /* void deliverAsMailExit (in nsIURI aUrl, in nsresult aExitCode); */
  NS_SCRIPTABLE NS_IMETHOD DeliverAsMailExit(nsIURI *aUrl, nsresult aExitCode) = 0;

  /* void deliverAsNewsExit (in nsIURI aUrl, in nsresult aExitCode); */
  NS_SCRIPTABLE NS_IMETHOD DeliverAsNewsExit(nsIURI *aUrl, nsresult aExitCode) = 0;

  /* void sendDeliveryCallback (in nsIURI aUrl, in boolean inIsNewsDelivery, in nsresult aExitCode); */
  NS_SCRIPTABLE NS_IMETHOD SendDeliveryCallback(nsIURI *aUrl, PRBool inIsNewsDelivery, nsresult aExitCode) = 0;

  /* void notifyListenerOnStartCopy (); */
  NS_SCRIPTABLE NS_IMETHOD NotifyListenerOnStartCopy(void) = 0;

  /* void notifyListenerOnProgressCopy (in unsigned long aProgress, in unsigned long aProgressMax); */
  NS_SCRIPTABLE NS_IMETHOD NotifyListenerOnProgressCopy(PRUint32 aProgress, PRUint32 aProgressMax) = 0;

  /* void notifyListenerOnStopCopy (in nsresult aStatus); */
  NS_SCRIPTABLE NS_IMETHOD NotifyListenerOnStopCopy(nsresult aStatus) = 0;

  /* void getMessageId (out ACString messageID); */
  NS_SCRIPTABLE NS_IMETHOD GetMessageId(nsACString & messageID NS_OUTPARAM) = 0;

  /* attribute nsMsgKey messageKey; */
  NS_SCRIPTABLE NS_IMETHOD GetMessageKey(nsMsgKey *aMessageKey) = 0;
  NS_SCRIPTABLE NS_IMETHOD SetMessageKey(nsMsgKey aMessageKey) = 0;

  /* nsIPrompt getDefaultPrompt (); */
  NS_SCRIPTABLE NS_IMETHOD GetDefaultPrompt(nsIPrompt * *_retval NS_OUTPARAM) = 0;

  /* void gatherMimeAttachments (); */
  NS_SCRIPTABLE NS_IMETHOD GatherMimeAttachments(void) = 0;

  /* readonly attribute boolean processAttachmentsSynchronously; */
  NS_SCRIPTABLE NS_IMETHOD GetProcessAttachmentsSynchronously(PRBool *aProcessAttachmentsSynchronously) = 0;

  /* [noscript] nsMsgAttachmentHandler getAttachmentHandlers (); */
  NS_IMETHOD GetAttachmentHandlers(nsMsgAttachmentHandler **_retval NS_OUTPARAM) = 0;

  /* readonly attribute unsigned long attachmentCount; */
  NS_SCRIPTABLE NS_IMETHOD GetAttachmentCount(PRUint32 *aAttachmentCount) = 0;

  /* attribute unsigned long pendingAttachmentCount; */
  NS_SCRIPTABLE NS_IMETHOD GetPendingAttachmentCount(PRUint32 *aPendingAttachmentCount) = 0;
  NS_SCRIPTABLE NS_IMETHOD SetPendingAttachmentCount(PRUint32 aPendingAttachmentCount) = 0;

  /* readonly attribute nsMsgDeliverMode deliveryMode; */
  NS_SCRIPTABLE NS_IMETHOD GetDeliveryMode(nsMsgDeliverMode *aDeliveryMode) = 0;

  /* nsIMsgProgress getProgress (); */
  NS_SCRIPTABLE NS_IMETHOD GetProgress(nsIMsgProgress * *_retval NS_OUTPARAM) = 0;

  /* nsIOutputStream getOutputStream (); */
  NS_SCRIPTABLE NS_IMETHOD GetOutputStream(nsIOutputStream * *_retval NS_OUTPARAM) = 0;

  /* attribute nsIRequest runningRequest; */
  NS_SCRIPTABLE NS_IMETHOD GetRunningRequest(nsIRequest * *aRunningRequest) = 0;
  NS_SCRIPTABLE NS_IMETHOD SetRunningRequest(nsIRequest *aRunningRequest) = 0;

  /* attribute nsresult status; */
  NS_SCRIPTABLE NS_IMETHOD GetStatus(nsresult *aStatus) = 0;
  NS_SCRIPTABLE NS_IMETHOD SetStatus(nsresult aStatus) = 0;

  /* attribute nsIMsgComposeSecure cryptoclosure; */
  NS_SCRIPTABLE NS_IMETHOD GetCryptoclosure(nsIMsgComposeSecure * *aCryptoclosure) = 0;
  NS_SCRIPTABLE NS_IMETHOD SetCryptoclosure(nsIMsgComposeSecure *aCryptoclosure) = 0;

};

  NS_DEFINE_STATIC_IID_ACCESSOR(nsIMsgSend, NS_IMSGSEND_IID)

/* Use this macro when declaring classes that implement this interface. */
#define NS_DECL_NSIMSGSEND \
  NS_SCRIPTABLE NS_IMETHOD CreateAndSendMessage(nsIEditor *aEditor, nsIMsgIdentity *aUserIdentity, const char * aAccountKey, nsIMsgCompFields *aFields, PRBool aIsDigest, PRBool aDontDeliver, nsMsgDeliverMode aMode, nsIMsgDBHdr *aMsgToReplace, const char * aBodyType, const char * aBody, PRUint32 aBodyLength, nsIArray *aAttachments, nsIArray *aPreloadedAttachments, nsIDOMWindow *aParentWindow, nsIMsgProgress *aProgress, nsIMsgSendListener *aListener, const char * aPassword, const nsACString & aOriginalMsgURI, MSG_ComposeType aType); \
  NS_SCRIPTABLE NS_IMETHOD SendMessageFile(nsIMsgIdentity *aUserIdentity, const char * aAccountKey, nsIMsgCompFields *aFields, nsIFile *aSendIFile, PRBool aDeleteSendFileOnCompletion, PRBool aDigest_p, nsMsgDeliverMode aMode, nsIMsgDBHdr *aMsgToReplace, nsIMsgSendListener *aListener, nsIMsgStatusFeedback *aStatusFeedback, const char * aPassword); \
  NS_SCRIPTABLE NS_IMETHOD Abort(void); \
  NS_SCRIPTABLE NS_IMETHOD Fail(nsresult failure_code, const PRUnichar * error_msg, nsresult *_retval NS_OUTPARAM); \
  NS_SCRIPTABLE NS_IMETHOD SetGUINotificationState(PRBool aEnableFlag); \
  NS_SCRIPTABLE NS_IMETHOD BeginCryptoEncapsulation(void); \
  NS_SCRIPTABLE NS_IMETHOD GetSendReport(nsIMsgSendReport * *aSendReport); \
  NS_SCRIPTABLE NS_IMETHOD NotifyListenerOnStartSending(const char * aMsgID, PRUint32 aMsgSize); \
  NS_SCRIPTABLE NS_IMETHOD NotifyListenerOnProgress(const char * aMsgID, PRUint32 aProgress, PRUint32 aProgressMax); \
  NS_SCRIPTABLE NS_IMETHOD NotifyListenerOnStatus(const char * aMsgID, const PRUnichar * aMsg); \
  NS_SCRIPTABLE NS_IMETHOD NotifyListenerOnStopSending(const char * aMsgID, nsresult aStatus, const PRUnichar * aMsg, nsIFile *returnFile); \
  NS_SCRIPTABLE NS_IMETHOD DeliverAsMailExit(nsIURI *aUrl, nsresult aExitCode); \
  NS_SCRIPTABLE NS_IMETHOD DeliverAsNewsExit(nsIURI *aUrl, nsresult aExitCode); \
  NS_SCRIPTABLE NS_IMETHOD SendDeliveryCallback(nsIURI *aUrl, PRBool inIsNewsDelivery, nsresult aExitCode); \
  NS_SCRIPTABLE NS_IMETHOD NotifyListenerOnStartCopy(void); \
  NS_SCRIPTABLE NS_IMETHOD NotifyListenerOnProgressCopy(PRUint32 aProgress, PRUint32 aProgressMax); \
  NS_SCRIPTABLE NS_IMETHOD NotifyListenerOnStopCopy(nsresult aStatus); \
  NS_SCRIPTABLE NS_IMETHOD GetMessageId(nsACString & messageID NS_OUTPARAM); \
  NS_SCRIPTABLE NS_IMETHOD GetMessageKey(nsMsgKey *aMessageKey); \
  NS_SCRIPTABLE NS_IMETHOD SetMessageKey(nsMsgKey aMessageKey); \
  NS_SCRIPTABLE NS_IMETHOD GetDefaultPrompt(nsIPrompt * *_retval NS_OUTPARAM); \
  NS_SCRIPTABLE NS_IMETHOD GatherMimeAttachments(void); \
  NS_SCRIPTABLE NS_IMETHOD GetProcessAttachmentsSynchronously(PRBool *aProcessAttachmentsSynchronously); \
  NS_IMETHOD GetAttachmentHandlers(nsMsgAttachmentHandler **_retval NS_OUTPARAM); \
  NS_SCRIPTABLE NS_IMETHOD GetAttachmentCount(PRUint32 *aAttachmentCount); \
  NS_SCRIPTABLE NS_IMETHOD GetPendingAttachmentCount(PRUint32 *aPendingAttachmentCount); \
  NS_SCRIPTABLE NS_IMETHOD SetPendingAttachmentCount(PRUint32 aPendingAttachmentCount); \
  NS_SCRIPTABLE NS_IMETHOD GetDeliveryMode(nsMsgDeliverMode *aDeliveryMode); \
  NS_SCRIPTABLE NS_IMETHOD GetProgress(nsIMsgProgress * *_retval NS_OUTPARAM); \
  NS_SCRIPTABLE NS_IMETHOD GetOutputStream(nsIOutputStream * *_retval NS_OUTPARAM); \
  NS_SCRIPTABLE NS_IMETHOD GetRunningRequest(nsIRequest * *aRunningRequest); \
  NS_SCRIPTABLE NS_IMETHOD SetRunningRequest(nsIRequest *aRunningRequest); \
  NS_SCRIPTABLE NS_IMETHOD GetStatus(nsresult *aStatus); \
  NS_SCRIPTABLE NS_IMETHOD SetStatus(nsresult aStatus); \
  NS_SCRIPTABLE NS_IMETHOD GetCryptoclosure(nsIMsgComposeSecure * *aCryptoclosure); \
  NS_SCRIPTABLE NS_IMETHOD SetCryptoclosure(nsIMsgComposeSecure *aCryptoclosure); 

/* Use this macro to declare functions that forward the behavior of this interface to another object. */
#define NS_FORWARD_NSIMSGSEND(_to) \
  NS_SCRIPTABLE NS_IMETHOD CreateAndSendMessage(nsIEditor *aEditor, nsIMsgIdentity *aUserIdentity, const char * aAccountKey, nsIMsgCompFields *aFields, PRBool aIsDigest, PRBool aDontDeliver, nsMsgDeliverMode aMode, nsIMsgDBHdr *aMsgToReplace, const char * aBodyType, const char * aBody, PRUint32 aBodyLength, nsIArray *aAttachments, nsIArray *aPreloadedAttachments, nsIDOMWindow *aParentWindow, nsIMsgProgress *aProgress, nsIMsgSendListener *aListener, const char * aPassword, const nsACString & aOriginalMsgURI, MSG_ComposeType aType) { return _to CreateAndSendMessage(aEditor, aUserIdentity, aAccountKey, aFields, aIsDigest, aDontDeliver, aMode, aMsgToReplace, aBodyType, aBody, aBodyLength, aAttachments, aPreloadedAttachments, aParentWindow, aProgress, aListener, aPassword, aOriginalMsgURI, aType); } \
  NS_SCRIPTABLE NS_IMETHOD SendMessageFile(nsIMsgIdentity *aUserIdentity, const char * aAccountKey, nsIMsgCompFields *aFields, nsIFile *aSendIFile, PRBool aDeleteSendFileOnCompletion, PRBool aDigest_p, nsMsgDeliverMode aMode, nsIMsgDBHdr *aMsgToReplace, nsIMsgSendListener *aListener, nsIMsgStatusFeedback *aStatusFeedback, const char * aPassword) { return _to SendMessageFile(aUserIdentity, aAccountKey, aFields, aSendIFile, aDeleteSendFileOnCompletion, aDigest_p, aMode, aMsgToReplace, aListener, aStatusFeedback, aPassword); } \
  NS_SCRIPTABLE NS_IMETHOD Abort(void) { return _to Abort(); } \
  NS_SCRIPTABLE NS_IMETHOD Fail(nsresult failure_code, const PRUnichar * error_msg, nsresult *_retval NS_OUTPARAM) { return _to Fail(failure_code, error_msg, _retval); } \
  NS_SCRIPTABLE NS_IMETHOD SetGUINotificationState(PRBool aEnableFlag) { return _to SetGUINotificationState(aEnableFlag); } \
  NS_SCRIPTABLE NS_IMETHOD BeginCryptoEncapsulation(void) { return _to BeginCryptoEncapsulation(); } \
  NS_SCRIPTABLE NS_IMETHOD GetSendReport(nsIMsgSendReport * *aSendReport) { return _to GetSendReport(aSendReport); } \
  NS_SCRIPTABLE NS_IMETHOD NotifyListenerOnStartSending(const char * aMsgID, PRUint32 aMsgSize) { return _to NotifyListenerOnStartSending(aMsgID, aMsgSize); } \
  NS_SCRIPTABLE NS_IMETHOD NotifyListenerOnProgress(const char * aMsgID, PRUint32 aProgress, PRUint32 aProgressMax) { return _to NotifyListenerOnProgress(aMsgID, aProgress, aProgressMax); } \
  NS_SCRIPTABLE NS_IMETHOD NotifyListenerOnStatus(const char * aMsgID, const PRUnichar * aMsg) { return _to NotifyListenerOnStatus(aMsgID, aMsg); } \
  NS_SCRIPTABLE NS_IMETHOD NotifyListenerOnStopSending(const char * aMsgID, nsresult aStatus, const PRUnichar * aMsg, nsIFile *returnFile) { return _to NotifyListenerOnStopSending(aMsgID, aStatus, aMsg, returnFile); } \
  NS_SCRIPTABLE NS_IMETHOD DeliverAsMailExit(nsIURI *aUrl, nsresult aExitCode) { return _to DeliverAsMailExit(aUrl, aExitCode); } \
  NS_SCRIPTABLE NS_IMETHOD DeliverAsNewsExit(nsIURI *aUrl, nsresult aExitCode) { return _to DeliverAsNewsExit(aUrl, aExitCode); } \
  NS_SCRIPTABLE NS_IMETHOD SendDeliveryCallback(nsIURI *aUrl, PRBool inIsNewsDelivery, nsresult aExitCode) { return _to SendDeliveryCallback(aUrl, inIsNewsDelivery, aExitCode); } \
  NS_SCRIPTABLE NS_IMETHOD NotifyListenerOnStartCopy(void) { return _to NotifyListenerOnStartCopy(); } \
  NS_SCRIPTABLE NS_IMETHOD NotifyListenerOnProgressCopy(PRUint32 aProgress, PRUint32 aProgressMax) { return _to NotifyListenerOnProgressCopy(aProgress, aProgressMax); } \
  NS_SCRIPTABLE NS_IMETHOD NotifyListenerOnStopCopy(nsresult aStatus) { return _to NotifyListenerOnStopCopy(aStatus); } \
  NS_SCRIPTABLE NS_IMETHOD GetMessageId(nsACString & messageID NS_OUTPARAM) { return _to GetMessageId(messageID); } \
  NS_SCRIPTABLE NS_IMETHOD GetMessageKey(nsMsgKey *aMessageKey) { return _to GetMessageKey(aMessageKey); } \
  NS_SCRIPTABLE NS_IMETHOD SetMessageKey(nsMsgKey aMessageKey) { return _to SetMessageKey(aMessageKey); } \
  NS_SCRIPTABLE NS_IMETHOD GetDefaultPrompt(nsIPrompt * *_retval NS_OUTPARAM) { return _to GetDefaultPrompt(_retval); } \
  NS_SCRIPTABLE NS_IMETHOD GatherMimeAttachments(void) { return _to GatherMimeAttachments(); } \
  NS_SCRIPTABLE NS_IMETHOD GetProcessAttachmentsSynchronously(PRBool *aProcessAttachmentsSynchronously) { return _to GetProcessAttachmentsSynchronously(aProcessAttachmentsSynchronously); } \
  NS_IMETHOD GetAttachmentHandlers(nsMsgAttachmentHandler **_retval NS_OUTPARAM) { return _to GetAttachmentHandlers(_retval); } \
  NS_SCRIPTABLE NS_IMETHOD GetAttachmentCount(PRUint32 *aAttachmentCount) { return _to GetAttachmentCount(aAttachmentCount); } \
  NS_SCRIPTABLE NS_IMETHOD GetPendingAttachmentCount(PRUint32 *aPendingAttachmentCount) { return _to GetPendingAttachmentCount(aPendingAttachmentCount); } \
  NS_SCRIPTABLE NS_IMETHOD SetPendingAttachmentCount(PRUint32 aPendingAttachmentCount) { return _to SetPendingAttachmentCount(aPendingAttachmentCount); } \
  NS_SCRIPTABLE NS_IMETHOD GetDeliveryMode(nsMsgDeliverMode *aDeliveryMode) { return _to GetDeliveryMode(aDeliveryMode); } \
  NS_SCRIPTABLE NS_IMETHOD GetProgress(nsIMsgProgress * *_retval NS_OUTPARAM) { return _to GetProgress(_retval); } \
  NS_SCRIPTABLE NS_IMETHOD GetOutputStream(nsIOutputStream * *_retval NS_OUTPARAM) { return _to GetOutputStream(_retval); } \
  NS_SCRIPTABLE NS_IMETHOD GetRunningRequest(nsIRequest * *aRunningRequest) { return _to GetRunningRequest(aRunningRequest); } \
  NS_SCRIPTABLE NS_IMETHOD SetRunningRequest(nsIRequest *aRunningRequest) { return _to SetRunningRequest(aRunningRequest); } \
  NS_SCRIPTABLE NS_IMETHOD GetStatus(nsresult *aStatus) { return _to GetStatus(aStatus); } \
  NS_SCRIPTABLE NS_IMETHOD SetStatus(nsresult aStatus) { return _to SetStatus(aStatus); } \
  NS_SCRIPTABLE NS_IMETHOD GetCryptoclosure(nsIMsgComposeSecure * *aCryptoclosure) { return _to GetCryptoclosure(aCryptoclosure); } \
  NS_SCRIPTABLE NS_IMETHOD SetCryptoclosure(nsIMsgComposeSecure *aCryptoclosure) { return _to SetCryptoclosure(aCryptoclosure); } 

/* Use this macro to declare functions that forward the behavior of this interface to another object in a safe way. */
#define NS_FORWARD_SAFE_NSIMSGSEND(_to) \
  NS_SCRIPTABLE NS_IMETHOD CreateAndSendMessage(nsIEditor *aEditor, nsIMsgIdentity *aUserIdentity, const char * aAccountKey, nsIMsgCompFields *aFields, PRBool aIsDigest, PRBool aDontDeliver, nsMsgDeliverMode aMode, nsIMsgDBHdr *aMsgToReplace, const char * aBodyType, const char * aBody, PRUint32 aBodyLength, nsIArray *aAttachments, nsIArray *aPreloadedAttachments, nsIDOMWindow *aParentWindow, nsIMsgProgress *aProgress, nsIMsgSendListener *aListener, const char * aPassword, const nsACString & aOriginalMsgURI, MSG_ComposeType aType) { return !_to ? NS_ERROR_NULL_POINTER : _to->CreateAndSendMessage(aEditor, aUserIdentity, aAccountKey, aFields, aIsDigest, aDontDeliver, aMode, aMsgToReplace, aBodyType, aBody, aBodyLength, aAttachments, aPreloadedAttachments, aParentWindow, aProgress, aListener, aPassword, aOriginalMsgURI, aType); } \
  NS_SCRIPTABLE NS_IMETHOD SendMessageFile(nsIMsgIdentity *aUserIdentity, const char * aAccountKey, nsIMsgCompFields *aFields, nsIFile *aSendIFile, PRBool aDeleteSendFileOnCompletion, PRBool aDigest_p, nsMsgDeliverMode aMode, nsIMsgDBHdr *aMsgToReplace, nsIMsgSendListener *aListener, nsIMsgStatusFeedback *aStatusFeedback, const char * aPassword) { return !_to ? NS_ERROR_NULL_POINTER : _to->SendMessageFile(aUserIdentity, aAccountKey, aFields, aSendIFile, aDeleteSendFileOnCompletion, aDigest_p, aMode, aMsgToReplace, aListener, aStatusFeedback, aPassword); } \
  NS_SCRIPTABLE NS_IMETHOD Abort(void) { return !_to ? NS_ERROR_NULL_POINTER : _to->Abort(); } \
  NS_SCRIPTABLE NS_IMETHOD Fail(nsresult failure_code, const PRUnichar * error_msg, nsresult *_retval NS_OUTPARAM) { return !_to ? NS_ERROR_NULL_POINTER : _to->Fail(failure_code, error_msg, _retval); } \
  NS_SCRIPTABLE NS_IMETHOD SetGUINotificationState(PRBool aEnableFlag) { return !_to ? NS_ERROR_NULL_POINTER : _to->SetGUINotificationState(aEnableFlag); } \
  NS_SCRIPTABLE NS_IMETHOD BeginCryptoEncapsulation(void) { return !_to ? NS_ERROR_NULL_POINTER : _to->BeginCryptoEncapsulation(); } \
  NS_SCRIPTABLE NS_IMETHOD GetSendReport(nsIMsgSendReport * *aSendReport) { return !_to ? NS_ERROR_NULL_POINTER : _to->GetSendReport(aSendReport); } \
  NS_SCRIPTABLE NS_IMETHOD NotifyListenerOnStartSending(const char * aMsgID, PRUint32 aMsgSize) { return !_to ? NS_ERROR_NULL_POINTER : _to->NotifyListenerOnStartSending(aMsgID, aMsgSize); } \
  NS_SCRIPTABLE NS_IMETHOD NotifyListenerOnProgress(const char * aMsgID, PRUint32 aProgress, PRUint32 aProgressMax) { return !_to ? NS_ERROR_NULL_POINTER : _to->NotifyListenerOnProgress(aMsgID, aProgress, aProgressMax); } \
  NS_SCRIPTABLE NS_IMETHOD NotifyListenerOnStatus(const char * aMsgID, const PRUnichar * aMsg) { return !_to ? NS_ERROR_NULL_POINTER : _to->NotifyListenerOnStatus(aMsgID, aMsg); } \
  NS_SCRIPTABLE NS_IMETHOD NotifyListenerOnStopSending(const char * aMsgID, nsresult aStatus, const PRUnichar * aMsg, nsIFile *returnFile) { return !_to ? NS_ERROR_NULL_POINTER : _to->NotifyListenerOnStopSending(aMsgID, aStatus, aMsg, returnFile); } \
  NS_SCRIPTABLE NS_IMETHOD DeliverAsMailExit(nsIURI *aUrl, nsresult aExitCode) { return !_to ? NS_ERROR_NULL_POINTER : _to->DeliverAsMailExit(aUrl, aExitCode); } \
  NS_SCRIPTABLE NS_IMETHOD DeliverAsNewsExit(nsIURI *aUrl, nsresult aExitCode) { return !_to ? NS_ERROR_NULL_POINTER : _to->DeliverAsNewsExit(aUrl, aExitCode); } \
  NS_SCRIPTABLE NS_IMETHOD SendDeliveryCallback(nsIURI *aUrl, PRBool inIsNewsDelivery, nsresult aExitCode) { return !_to ? NS_ERROR_NULL_POINTER : _to->SendDeliveryCallback(aUrl, inIsNewsDelivery, aExitCode); } \
  NS_SCRIPTABLE NS_IMETHOD NotifyListenerOnStartCopy(void) { return !_to ? NS_ERROR_NULL_POINTER : _to->NotifyListenerOnStartCopy(); } \
  NS_SCRIPTABLE NS_IMETHOD NotifyListenerOnProgressCopy(PRUint32 aProgress, PRUint32 aProgressMax) { return !_to ? NS_ERROR_NULL_POINTER : _to->NotifyListenerOnProgressCopy(aProgress, aProgressMax); } \
  NS_SCRIPTABLE NS_IMETHOD NotifyListenerOnStopCopy(nsresult aStatus) { return !_to ? NS_ERROR_NULL_POINTER : _to->NotifyListenerOnStopCopy(aStatus); } \
  NS_SCRIPTABLE NS_IMETHOD GetMessageId(nsACString & messageID NS_OUTPARAM) { return !_to ? NS_ERROR_NULL_POINTER : _to->GetMessageId(messageID); } \
  NS_SCRIPTABLE NS_IMETHOD GetMessageKey(nsMsgKey *aMessageKey) { return !_to ? NS_ERROR_NULL_POINTER : _to->GetMessageKey(aMessageKey); } \
  NS_SCRIPTABLE NS_IMETHOD SetMessageKey(nsMsgKey aMessageKey) { return !_to ? NS_ERROR_NULL_POINTER : _to->SetMessageKey(aMessageKey); } \
  NS_SCRIPTABLE NS_IMETHOD GetDefaultPrompt(nsIPrompt * *_retval NS_OUTPARAM) { return !_to ? NS_ERROR_NULL_POINTER : _to->GetDefaultPrompt(_retval); } \
  NS_SCRIPTABLE NS_IMETHOD GatherMimeAttachments(void) { return !_to ? NS_ERROR_NULL_POINTER : _to->GatherMimeAttachments(); } \
  NS_SCRIPTABLE NS_IMETHOD GetProcessAttachmentsSynchronously(PRBool *aProcessAttachmentsSynchronously) { return !_to ? NS_ERROR_NULL_POINTER : _to->GetProcessAttachmentsSynchronously(aProcessAttachmentsSynchronously); } \
  NS_IMETHOD GetAttachmentHandlers(nsMsgAttachmentHandler **_retval NS_OUTPARAM) { return !_to ? NS_ERROR_NULL_POINTER : _to->GetAttachmentHandlers(_retval); } \
  NS_SCRIPTABLE NS_IMETHOD GetAttachmentCount(PRUint32 *aAttachmentCount) { return !_to ? NS_ERROR_NULL_POINTER : _to->GetAttachmentCount(aAttachmentCount); } \
  NS_SCRIPTABLE NS_IMETHOD GetPendingAttachmentCount(PRUint32 *aPendingAttachmentCount) { return !_to ? NS_ERROR_NULL_POINTER : _to->GetPendingAttachmentCount(aPendingAttachmentCount); } \
  NS_SCRIPTABLE NS_IMETHOD SetPendingAttachmentCount(PRUint32 aPendingAttachmentCount) { return !_to ? NS_ERROR_NULL_POINTER : _to->SetPendingAttachmentCount(aPendingAttachmentCount); } \
  NS_SCRIPTABLE NS_IMETHOD GetDeliveryMode(nsMsgDeliverMode *aDeliveryMode) { return !_to ? NS_ERROR_NULL_POINTER : _to->GetDeliveryMode(aDeliveryMode); } \
  NS_SCRIPTABLE NS_IMETHOD GetProgress(nsIMsgProgress * *_retval NS_OUTPARAM) { return !_to ? NS_ERROR_NULL_POINTER : _to->GetProgress(_retval); } \
  NS_SCRIPTABLE NS_IMETHOD GetOutputStream(nsIOutputStream * *_retval NS_OUTPARAM) { return !_to ? NS_ERROR_NULL_POINTER : _to->GetOutputStream(_retval); } \
  NS_SCRIPTABLE NS_IMETHOD GetRunningRequest(nsIRequest * *aRunningRequest) { return !_to ? NS_ERROR_NULL_POINTER : _to->GetRunningRequest(aRunningRequest); } \
  NS_SCRIPTABLE NS_IMETHOD SetRunningRequest(nsIRequest *aRunningRequest) { return !_to ? NS_ERROR_NULL_POINTER : _to->SetRunningRequest(aRunningRequest); } \
  NS_SCRIPTABLE NS_IMETHOD GetStatus(nsresult *aStatus) { return !_to ? NS_ERROR_NULL_POINTER : _to->GetStatus(aStatus); } \
  NS_SCRIPTABLE NS_IMETHOD SetStatus(nsresult aStatus) { return !_to ? NS_ERROR_NULL_POINTER : _to->SetStatus(aStatus); } \
  NS_SCRIPTABLE NS_IMETHOD GetCryptoclosure(nsIMsgComposeSecure * *aCryptoclosure) { return !_to ? NS_ERROR_NULL_POINTER : _to->GetCryptoclosure(aCryptoclosure); } \
  NS_SCRIPTABLE NS_IMETHOD SetCryptoclosure(nsIMsgComposeSecure *aCryptoclosure) { return !_to ? NS_ERROR_NULL_POINTER : _to->SetCryptoclosure(aCryptoclosure); } 

#if 0
/* Use the code below as a template for the implementation class for this interface. */

/* Header file */
class nsMsgSend : public nsIMsgSend
{
public:
  NS_DECL_ISUPPORTS
  NS_DECL_NSIMSGSEND

  nsMsgSend();

private:
  ~nsMsgSend();

protected:
  /* additional members */
};

/* Implementation file */
NS_IMPL_ISUPPORTS1(nsMsgSend, nsIMsgSend)

nsMsgSend::nsMsgSend()
{
  /* member initializers and constructor code */
}

nsMsgSend::~nsMsgSend()
{
  /* destructor code */
}

/* void createAndSendMessage (in nsIEditor aEditor, in nsIMsgIdentity aUserIdentity, in string aAccountKey, in nsIMsgCompFields aFields, in boolean aIsDigest, in boolean aDontDeliver, in nsMsgDeliverMode aMode, in nsIMsgDBHdr aMsgToReplace, in string aBodyType, in string aBody, in unsigned long aBodyLength, in nsIArray aAttachments, in nsIArray aPreloadedAttachments, in nsIDOMWindow aParentWindow, in nsIMsgProgress aProgress, in nsIMsgSendListener aListener, in string aPassword, in AUTF8String aOriginalMsgURI, in MSG_ComposeType aType); */
NS_IMETHODIMP nsMsgSend::CreateAndSendMessage(nsIEditor *aEditor, nsIMsgIdentity *aUserIdentity, const char * aAccountKey, nsIMsgCompFields *aFields, PRBool aIsDigest, PRBool aDontDeliver, nsMsgDeliverMode aMode, nsIMsgDBHdr *aMsgToReplace, const char * aBodyType, const char * aBody, PRUint32 aBodyLength, nsIArray *aAttachments, nsIArray *aPreloadedAttachments, nsIDOMWindow *aParentWindow, nsIMsgProgress *aProgress, nsIMsgSendListener *aListener, const char * aPassword, const nsACString & aOriginalMsgURI, MSG_ComposeType aType)
{
    return NS_ERROR_NOT_IMPLEMENTED;
}

/* void sendMessageFile (in nsIMsgIdentity aUserIdentity, in string aAccountKey, in nsIMsgCompFields aFields, in nsIFile aSendIFile, in boolean aDeleteSendFileOnCompletion, in boolean aDigest_p, in nsMsgDeliverMode aMode, in nsIMsgDBHdr aMsgToReplace, in nsIMsgSendListener aListener, in nsIMsgStatusFeedback aStatusFeedback, in string aPassword); */
NS_IMETHODIMP nsMsgSend::SendMessageFile(nsIMsgIdentity *aUserIdentity, const char * aAccountKey, nsIMsgCompFields *aFields, nsIFile *aSendIFile, PRBool aDeleteSendFileOnCompletion, PRBool aDigest_p, nsMsgDeliverMode aMode, nsIMsgDBHdr *aMsgToReplace, nsIMsgSendListener *aListener, nsIMsgStatusFeedback *aStatusFeedback, const char * aPassword)
{
    return NS_ERROR_NOT_IMPLEMENTED;
}

/* void abort (); */
NS_IMETHODIMP nsMsgSend::Abort()
{
    return NS_ERROR_NOT_IMPLEMENTED;
}

/* nsresult fail (in nsresult failure_code, in wstring error_msg); */
NS_IMETHODIMP nsMsgSend::Fail(nsresult failure_code, const PRUnichar * error_msg, nsresult *_retval NS_OUTPARAM)
{
    return NS_ERROR_NOT_IMPLEMENTED;
}

/* void setGUINotificationState (in boolean aEnableFlag); */
NS_IMETHODIMP nsMsgSend::SetGUINotificationState(PRBool aEnableFlag)
{
    return NS_ERROR_NOT_IMPLEMENTED;
}

/* void BeginCryptoEncapsulation (); */
NS_IMETHODIMP nsMsgSend::BeginCryptoEncapsulation()
{
    return NS_ERROR_NOT_IMPLEMENTED;
}

/* readonly attribute nsIMsgSendReport sendReport; */
NS_IMETHODIMP nsMsgSend::GetSendReport(nsIMsgSendReport * *aSendReport)
{
    return NS_ERROR_NOT_IMPLEMENTED;
}

/* void notifyListenerOnStartSending (in string aMsgID, in unsigned long aMsgSize); */
NS_IMETHODIMP nsMsgSend::NotifyListenerOnStartSending(const char * aMsgID, PRUint32 aMsgSize)
{
    return NS_ERROR_NOT_IMPLEMENTED;
}

/* void notifyListenerOnProgress (in string aMsgID, in unsigned long aProgress, in unsigned long aProgressMax); */
NS_IMETHODIMP nsMsgSend::NotifyListenerOnProgress(const char * aMsgID, PRUint32 aProgress, PRUint32 aProgressMax)
{
    return NS_ERROR_NOT_IMPLEMENTED;
}

/* void notifyListenerOnStatus (in string aMsgID, in wstring aMsg); */
NS_IMETHODIMP nsMsgSend::NotifyListenerOnStatus(const char * aMsgID, const PRUnichar * aMsg)
{
    return NS_ERROR_NOT_IMPLEMENTED;
}

/* void notifyListenerOnStopSending (in string aMsgID, in nsresult aStatus, in wstring aMsg, in nsIFile returnFile); */
NS_IMETHODIMP nsMsgSend::NotifyListenerOnStopSending(const char * aMsgID, nsresult aStatus, const PRUnichar * aMsg, nsIFile *returnFile)
{
    return NS_ERROR_NOT_IMPLEMENTED;
}

/* void deliverAsMailExit (in nsIURI aUrl, in nsresult aExitCode); */
NS_IMETHODIMP nsMsgSend::DeliverAsMailExit(nsIURI *aUrl, nsresult aExitCode)
{
    return NS_ERROR_NOT_IMPLEMENTED;
}

/* void deliverAsNewsExit (in nsIURI aUrl, in nsresult aExitCode); */
NS_IMETHODIMP nsMsgSend::DeliverAsNewsExit(nsIURI *aUrl, nsresult aExitCode)
{
    return NS_ERROR_NOT_IMPLEMENTED;
}

/* void sendDeliveryCallback (in nsIURI aUrl, in boolean inIsNewsDelivery, in nsresult aExitCode); */
NS_IMETHODIMP nsMsgSend::SendDeliveryCallback(nsIURI *aUrl, PRBool inIsNewsDelivery, nsresult aExitCode)
{
    return NS_ERROR_NOT_IMPLEMENTED;
}

/* void notifyListenerOnStartCopy (); */
NS_IMETHODIMP nsMsgSend::NotifyListenerOnStartCopy()
{
    return NS_ERROR_NOT_IMPLEMENTED;
}

/* void notifyListenerOnProgressCopy (in unsigned long aProgress, in unsigned long aProgressMax); */
NS_IMETHODIMP nsMsgSend::NotifyListenerOnProgressCopy(PRUint32 aProgress, PRUint32 aProgressMax)
{
    return NS_ERROR_NOT_IMPLEMENTED;
}

/* void notifyListenerOnStopCopy (in nsresult aStatus); */
NS_IMETHODIMP nsMsgSend::NotifyListenerOnStopCopy(nsresult aStatus)
{
    return NS_ERROR_NOT_IMPLEMENTED;
}

/* void getMessageId (out ACString messageID); */
NS_IMETHODIMP nsMsgSend::GetMessageId(nsACString & messageID NS_OUTPARAM)
{
    return NS_ERROR_NOT_IMPLEMENTED;
}

/* attribute nsMsgKey messageKey; */
NS_IMETHODIMP nsMsgSend::GetMessageKey(nsMsgKey *aMessageKey)
{
    return NS_ERROR_NOT_IMPLEMENTED;
}
NS_IMETHODIMP nsMsgSend::SetMessageKey(nsMsgKey aMessageKey)
{
    return NS_ERROR_NOT_IMPLEMENTED;
}

/* nsIPrompt getDefaultPrompt (); */
NS_IMETHODIMP nsMsgSend::GetDefaultPrompt(nsIPrompt * *_retval NS_OUTPARAM)
{
    return NS_ERROR_NOT_IMPLEMENTED;
}

/* void gatherMimeAttachments (); */
NS_IMETHODIMP nsMsgSend::GatherMimeAttachments()
{
    return NS_ERROR_NOT_IMPLEMENTED;
}

/* readonly attribute boolean processAttachmentsSynchronously; */
NS_IMETHODIMP nsMsgSend::GetProcessAttachmentsSynchronously(PRBool *aProcessAttachmentsSynchronously)
{
    return NS_ERROR_NOT_IMPLEMENTED;
}

/* [noscript] nsMsgAttachmentHandler getAttachmentHandlers (); */
NS_IMETHODIMP nsMsgSend::GetAttachmentHandlers(nsMsgAttachmentHandler **_retval NS_OUTPARAM)
{
    return NS_ERROR_NOT_IMPLEMENTED;
}

/* readonly attribute unsigned long attachmentCount; */
NS_IMETHODIMP nsMsgSend::GetAttachmentCount(PRUint32 *aAttachmentCount)
{
    return NS_ERROR_NOT_IMPLEMENTED;
}

/* attribute unsigned long pendingAttachmentCount; */
NS_IMETHODIMP nsMsgSend::GetPendingAttachmentCount(PRUint32 *aPendingAttachmentCount)
{
    return NS_ERROR_NOT_IMPLEMENTED;
}
NS_IMETHODIMP nsMsgSend::SetPendingAttachmentCount(PRUint32 aPendingAttachmentCount)
{
    return NS_ERROR_NOT_IMPLEMENTED;
}

/* readonly attribute nsMsgDeliverMode deliveryMode; */
NS_IMETHODIMP nsMsgSend::GetDeliveryMode(nsMsgDeliverMode *aDeliveryMode)
{
    return NS_ERROR_NOT_IMPLEMENTED;
}

/* nsIMsgProgress getProgress (); */
NS_IMETHODIMP nsMsgSend::GetProgress(nsIMsgProgress * *_retval NS_OUTPARAM)
{
    return NS_ERROR_NOT_IMPLEMENTED;
}

/* nsIOutputStream getOutputStream (); */
NS_IMETHODIMP nsMsgSend::GetOutputStream(nsIOutputStream * *_retval NS_OUTPARAM)
{
    return NS_ERROR_NOT_IMPLEMENTED;
}

/* attribute nsIRequest runningRequest; */
NS_IMETHODIMP nsMsgSend::GetRunningRequest(nsIRequest * *aRunningRequest)
{
    return NS_ERROR_NOT_IMPLEMENTED;
}
NS_IMETHODIMP nsMsgSend::SetRunningRequest(nsIRequest *aRunningRequest)
{
    return NS_ERROR_NOT_IMPLEMENTED;
}

/* attribute nsresult status; */
NS_IMETHODIMP nsMsgSend::GetStatus(nsresult *aStatus)
{
    return NS_ERROR_NOT_IMPLEMENTED;
}
NS_IMETHODIMP nsMsgSend::SetStatus(nsresult aStatus)
{
    return NS_ERROR_NOT_IMPLEMENTED;
}

/* attribute nsIMsgComposeSecure cryptoclosure; */
NS_IMETHODIMP nsMsgSend::GetCryptoclosure(nsIMsgComposeSecure * *aCryptoclosure)
{
    return NS_ERROR_NOT_IMPLEMENTED;
}
NS_IMETHODIMP nsMsgSend::SetCryptoclosure(nsIMsgComposeSecure *aCryptoclosure)
{
    return NS_ERROR_NOT_IMPLEMENTED;
}

/* End of implementation class template. */
#endif


#endif /* __gen_nsIMsgSend_h__ */
