/*
 * COM Classes for inetcomm
 *
 * Copyright 2010 Alexandre Julliard
 *
 * This library is free software; you can redistribute it and/or
 * modify it under the terms of the GNU Lesser General Public
 * License as published by the Free Software Foundation; either
 * version 2.1 of the License, or (at your option) any later version.
 *
 * This library is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
 * Lesser General Public License for more details.
 *
 * You should have received a copy of the GNU Lesser General Public
 * License along with this library; if not, write to the Free Software
 * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
 */

#pragma makedep register

[
    helpstring("CLSID_IMimeBody"),
    threading(both),
    uuid(fd853cdb-7f86-11d0-8252-00c04fd85ab4)
]
coclass IMimeBody { interface IMimeBody; }

[
    helpstring("CLSID_IMimeAllocator"),
    threading(both),
    uuid(fd853cdd-7f86-11d0-8252-00c04fd85ab4)
]
coclass IMimeAllocator { interface IMimeAllocator; }

[
    helpstring("CLSID_IMimeSecurity"),
    threading(both),
    uuid(fd853cde-7f86-11d0-8252-00c04fd85ab4)
]
coclass IMimeSecurity { interface IMimeSecurity; }

[
    helpstring("CLSID_IVirtualStream"),
    threading(both),
    uuid(fd853cdf-7f86-11d0-8252-00c04fd85ab4)
]
coclass IVirtualStream { interface IVirtualStream; }

[
    helpstring("CLSID_IMimeMessage"),
    threading(both),
    uuid(fd853ce3-7f86-11d0-8252-00c04fd85ab4)
]
coclass IMimeMessage { interface IMimeMessage; }

[
    helpstring("CLSID_ISMTPTransport"),
    threading(both),
    uuid(fd853ce6-7f86-11d0-8252-00c04fd85ab4)
]
coclass ISMTPTransport { interface ISMTPTransport; }

[
    helpstring("CLSID_IPOP3Transport"),
    threading(both),
    uuid(fd853ce7-7f86-11d0-8252-00c04fd85ab4)
]
coclass IPOP3Transport { interface IPOP3Transport; }

[
    helpstring("CLSID_INNTPTransport"),
    threading(both),
    uuid(fd853ce8-7f86-11d0-8252-00c04fd85ab4)
]
coclass INNTPTransport { interface INNTPTransport; }

[
    helpstring("CLSID_IRASTransport"),
    threading(both),
    uuid(fd853ce9-7f86-11d0-8252-00c04fd85ab4)
]
coclass IRASTransport { interface IRASTransport; }

[
    helpstring("CLSID_IRangeList"),
    threading(both),
    uuid(fd853cea-7f86-11d0-8252-00c04fd85ab4)
]
coclass IRangeList { interface IRangeList; }

[
    helpstring("CLSID_IIMAPTransport"),
    threading(both),
    uuid(fd853ceb-7f86-11d0-8252-00c04fd85ab4)
]
coclass IIMAPTransport { interface IIMAPTransport; }

[
    helpstring("CLSID_IHTTPMailTransport"),
    threading(both),
    uuid(5a580c11-e5eb-11d1-a86e-0000f8084f96)
]
coclass IHTTPMailTransport { interface IHTTPMailTransport; }

[
    helpstring("CLSID_ISMTPTransport2"),
    threading(both),
    uuid(0df2c7ec-3435-11d0-81d0-00c04fd85ab4)
]
coclass ISMTPTransport2 { interface ISMTPTransport2; }

[
    helpstring("CLSID_IPropFindRequest"),
    threading(both),
    uuid(bb847b8a-054a-11d2-a894-0000f8084f96)
]
coclass IPropFindRequest { interface IPropFindRequest; }

[
    helpstring("CLSID_IPropPatchRequest"),
    threading(both),
    uuid(ea678830-235d-11d2-a8b6-0000f8084f96)
]
coclass IPropPatchRequest { interface IPropPatchRequest; }

[
    helpstring("MHTML Asynchronous Pluggable Protocol Handler"),
    threading(both),
    uuid(05300401-bcbc-11d0-85e3-00c04fd85ab4)
]
coclass MimeHtmlProtocol { interface IInternetProtocol; }
