Mime Perl Reference Documentation

CkMime

Current Version: 11.5.0

Chilkat.Mime

Build, parse, modify, serialize, secure, and inspect MIME and S/MIME data.

Mime provides low-level MIME and S/MIME handling for applications that need direct control over MIME structure, headers, body content, encodings, multipart relationships, attachments, and PKCS7/CMS security layers. It can load, create, inspect, modify, serialize, and save MIME messages; build multipart structures; manage headers and content-transfer encodings; extract attachments; convert MIME to and from XML; and sign, verify, encrypt, decrypt, or unwrap S/MIME content.

Create and load MIME

Build MIME content programmatically or load existing MIME from strings, files, byte data, or other application sources.

Headers and body content

Read, add, replace, or remove MIME headers, set body content, and control content types, charsets, and transfer encodings.

Multipart structures

Create and inspect multipart MIME trees such as mixed, alternative, related, signed, encrypted, and nested MIME structures.

Attachments and parts

Add, locate, extract, remove, or inspect MIME parts and attachments, including filenames and encoded body data.

S/MIME security

Sign, verify, encrypt, decrypt, unwrap, and inspect PKCS7/CMS S/MIME layers using certificates and private keys.

Serialization and XML

Emit MIME text, save MIME to files, or convert MIME to and from XML for structured inspection, transformation, or storage.

Common pattern: Use Mime when an application needs low-level control over MIME parts, headers, encodings, multipart layout, or S/MIME security. For ordinary email composition and message-level operations, use Chilkat.Email; use Mime when you need to work closer to the raw MIME structure.
Initial state: A new Mime object has no headers or child parts. Its string serialization consists only of the blank header/body separator (CRLF CRLF) until content is added.
MIME parsing is semantic, not byte-preserving. Loading and reserializing can unfold headers, normalize parameter quoting and transfer encodings, use CRLF for generated headers and multipart framing, and discard multipart preamble or epilogue text. Use byte-oriented methods such as LoadMimeBd and GetMimeBd when arbitrary 8-bit bytes or embedded NUL bytes must be preserved.

Object Creation

$obj = chilkat::CkMime->new();

Properties

Boundary
# $strVal is a string
# $ckStr is a CkString
$mime->get_Boundary($ckStr);
$strVal = $mime->boundary();
$mime->put_Boundary($strVal);

Gets or sets the raw boundary token used by a multipart MIME entity. Do not include surrounding quotation marks.

Content-Type: multipart/mixed; boundary="example-boundary"
For this example, Boundary is example-boundary. Chilkat automatically quotes the parameter when the token contains characters such as spaces or semicolons.
Normally automatic. Methods such as NewMultipartMixed, NewMultipartAlternative, and NewMultipartRelated generate a nonempty boundary.
Caller-supplied boundaries are not validated. Chilkat does not detect collisions with body text. An empty value is permitted but produces invalid multipart delimiters, and supplying quotation marks as part of the property value causes those quotation marks to become part of the boundary. The property can also be set on a nonmultipart entity, where it is simply added as a Content-Type parameter.

top
Charset
# $strVal is a string
# $ckStr is a CkString
$mime->get_Charset($ckStr);
$strVal = $mime->charset();
$mime->put_Charset($strVal);

Gets or sets the charset parameter of the Content-Type header field.

Content-Type: text/plain; charset=utf-8
Changing this property preserves the media type and other parameters. Setting it when no Content-Type exists creates a Content-Type field, although the media type remains empty until ContentType is set.
Charset versus transfer encoding. The charset identifies how text characters are represented as bytes. Encoding controls the MIME transport representation of those bytes.
Empty-string behavior. Setting Charset to an empty string does not remove the parameter. It selects the platform default ANSI charset; on Windows this is typically windows-1252.

top
CmsOptions
# $strVal is a string
# $ckStr is a CkString
$mime->get_CmsOptions($ckStr);
$strVal = $mime->cmsOptions();
$mime->put_CmsOptions($strVal);
Introduced in version 9.5.0.78

Gets or sets a JSON string containing advanced CMS/PKCS #7 signing and validation options. The empty string selects normal behavior. This property is intended for specialized interoperability requirements; applications should leave it empty unless a documented option is specifically needed.

top
ContentType
# $strVal is a string
# $ckStr is a CkString
$mime->get_ContentType($ckStr);
$strVal = $mime->contentType();
$mime->put_ContentType($strVal);

Gets or sets the MIME media type of the current part, excluding all parameters. Supply a value such as text/plain, text/html, application/pdf, or multipart/mixed; do not include charset, boundary, or other parameters in this property.

Changing the media type preserves the existing charset and unrecognized parameters, but may remove parameters that are specific to the previous media type, such as format=flowed. Setting an empty string leaves an empty media type and can therefore produce an invalid-looking header if other parameters remain.

Classification methods use this value. Methods such as IsText, IsImage, and IsMultipart classify the media type stored here. Parameters must be set through their dedicated properties or header attributes, not appended to ContentType.

top
CurrentDateTime
# $strVal is a string
# $ckStr is a CkString
$mime->get_CurrentDateTime($ckStr);
$strVal = $mime->currentDateTime();

Returns the current local date and time formatted as an Internet message date, including the numeric UTC offset. For example:

Fri, 21 Nov 1997 09:55:06 -0600

More Information and Examples
top
DebugLogFilePath
# $strVal is a string
# $ckStr is a CkString
$mime->get_DebugLogFilePath($ckStr);
$strVal = $mime->debugLogFilePath();
$mime->put_DebugLogFilePath($strVal);

If set to a file path, this property logs the LastErrorText of each Chilkat method or property call to the specified file. This logging helps identify the context and history of Chilkat calls leading up to any crash or hang, aiding in debugging.

Enabling the VerboseLogging property provides more detailed information. This property is mainly used for debugging rare instances where a Chilkat method call causes a hang or crash, which should generally not happen.

Possible causes of hangs include:

  • A timeout property set to 0, indicating an infinite timeout.
  • A hang occurring within an event callback in the application code.
  • An internal bug in the Chilkat code causing the hang.

More Information and Examples
top
Disposition
# $strVal is a string
# $ckStr is a CkString
$mime->get_Disposition($ckStr);
$strVal = $mime->disposition();
$mime->put_Disposition($strVal);

Gets or sets the disposition value from the Content-Disposition header field, excluding parameters such as filename.

Content-Disposition: attachment; filename="report.pdf"
Changing this property preserves an existing filename parameter. Typical values are attachment and inline.

More Information and Examples
top
Encoding
# $strVal is a string
# $ckStr is a CkString
$mime->get_Encoding($ckStr);
$strVal = $mime->encoding();
$mime->put_Encoding($strVal);

Gets or sets the value of the Content-Transfer-Encoding header field for the current part. Common values include base64, quoted-printable, 7bit, 8bit, and binary.

Transfer encoding is not compression. It determines how the body bytes are represented in serialized MIME. GetBodyEncoded returns the transfer-encoded form, while GetBodyBd, GetBodyBinary, and SaveBody return or save decoded bytes.

More Information and Examples
top
Filename
# $strVal is a string
# $ckStr is a CkString
$mime->get_Filename($ckStr);
$strVal = $mime->filename();
$mime->put_Filename($strVal);

Gets or sets the filename parameter of the Content-Disposition header field. The value is a receiver-facing filename, not a local filesystem path.

Changing this property preserves the disposition value but removes other Content-Disposition parameters such as size. Setting an empty string removes the filename parameter.

International filenames. When setting a non-ASCII filename, Chilkat emits an RFC 2047 encoded-word in filename=. When reading a header containing both filename= and filename*=, this property returns filename=. Use GetHeaderFieldAttribute to retrieve the raw filename* value.

More Information and Examples
top
LastErrorHtml
# $strVal is a string
# $ckStr is a CkString
$mime->get_LastErrorHtml($ckStr);
$strVal = $mime->lastErrorHtml();

Provides HTML-formatted information about the last called method or property. If a method call fails or behaves unexpectedly, check this property for details. Note that information is available regardless of the method call's success.

top
LastErrorText
# $strVal is a string
# $ckStr is a CkString
$mime->get_LastErrorText($ckStr);
$strVal = $mime->lastErrorText();

Provides plain text information about the last called method or property. If a method call fails or behaves unexpectedly, check this property for details. Note that information is available regardless of the method call's success.

top
LastErrorXml
# $strVal is a string
# $ckStr is a CkString
$mime->get_LastErrorXml($ckStr);
$strVal = $mime->lastErrorXml();

Provides XML-formatted information about the last called method or property. If a method call fails or behaves unexpectedly, check this property for details. Note that information is available regardless of the method call's success.

top
LastMethodSuccess
# $boolVal is a boolean
$boolVal = $mime->get_LastMethodSuccess();
$mime->put_LastMethodSuccess($boolVal);

Indicates the success or failure of the most recent method call: 1 means success, 0 means failure. This property remains unchanged by property setters or getters. This method is present to address challenges in checking for null or Nothing returns in certain programming languages. Note: This property does not apply to methods that return integer values or to boolean-returning methods where the boolean does not indicate success or failure.

top
Micalg
# $strVal is a string
# $ckStr is a CkString
$mime->get_Micalg($ckStr);
$strVal = $mime->micalg();
$mime->put_Micalg($strVal);

Gets or sets the micalg parameter of a multipart/signed Content-Type header field.

Content-Type: multipart/signed;
  protocol="application/pkcs7-signature";
  micalg=sha-256;
  boundary="example-boundary"
The parameter advertises the message-integrity algorithm used by the detached signature. When creating a signature, prefer setting SigningHashAlg; Chilkat generates the corresponding micalg value.

top
Name
# $strVal is a string
# $ckStr is a CkString
$mime->get_Name($ckStr);
$strVal = $mime->name();
$mime->put_Name($strVal);

Gets or sets the name parameter of the Content-Type header field. For attachments, Filename is generally the primary receiver-facing name.

Setting a non-ASCII value causes Chilkat to emit an RFC 2047 encoded-word in the name= parameter. Setting this property when no media type exists creates a Content-Type field with an empty media type.

More Information and Examples
top
NumDecryptCerts
# $intVal is an integer
$intVal = $mime->get_NumDecryptCerts();
Introduced in version 11.0.0

Returns the number of decryption certificates recorded by the most recent call to UnwrapSecurity. Use LastDecryptCert with a zero-based index to retrieve each certificate.

top
NumHeaderFields
# $intVal is an integer
$intVal = $mime->get_NumHeaderFields();

Returns the number of header-field occurrences in the current part. Duplicate names count separately and retain their order. Valid indexes range from 0 through NumHeaderFields - 1 for use with GetHeaderFieldName and GetHeaderFieldValue.

During MIME parsing, duplicate ordinary fields are retained. Duplicate Content-Type fields are collapsed, with the last value taking effect.

top
NumParts
# $intVal is an integer
$intVal = $mime->get_NumParts();

Returns the number of direct child parts. It does not include deeper descendants. Iterate from 0 through NumParts - 1 and call PartAt to traverse the tree.

The object returned by PartAt provides live access to the stored child. Modifying that returned object modifies the parent MIME tree.

top
NumSignerCerts
# $intVal is an integer
$intVal = $mime->get_NumSignerCerts();

Returns the number of signer certificates recorded by the most recent signature-verification or security-unwrapping operation. The property is populated by UnwrapSecurity. Use LastSignerCert to retrieve a certificate by zero-based index.

top
OaepHash
# $strVal is a string
# $ckStr is a CkString
$mime->get_OaepHash($ckStr);
$strVal = $mime->oaepHash();
$mime->put_OaepHash($strVal);
Introduced in version 9.5.0.67

Gets or sets the hash algorithm used by RSAES-OAEP when encrypting the CMS content-encryption key. Supported values are sha1, sha256, sha384, and sha512. This property is used only when OaepPadding is 1.

top
OaepMgfHash
# $strVal is a string
# $ckStr is a CkString
$mime->get_OaepMgfHash($ckStr);
$strVal = $mime->oaepMgfHash();
$mime->put_OaepMgfHash($strVal);
Introduced in version 9.5.0.71

Gets or sets the hash algorithm used by the mask generation function (MGF1) within RSAES-OAEP. Supported values are sha1, sha256, sha384, and sha512. The default is sha1. This property is used only when OaepPadding is 1.

top
OaepPadding
# $boolVal is a boolean
$boolVal = $mime->get_OaepPadding();
$mime->put_OaepPadding($boolVal);
Introduced in version 9.5.0.67

Selects the RSA key-transport padding used when creating encrypted MIME. The default is 0, which uses RSAES-PKCS1-v1_5. Set to 1 to use RSAES-OAEP.

Scope. This setting protects the symmetric content-encryption key for RSA recipients; it does not change the symmetric algorithm selected by Pkcs7CryptAlg.

top
Pkcs7CryptAlg
# $strVal is a string
# $ckStr is a CkString
$mime->get_Pkcs7CryptAlg($ckStr);
$strVal = $mime->pkcs7CryptAlg();
$mime->put_Pkcs7CryptAlg($strVal);

Gets or sets the symmetric content-encryption algorithm used when creating CMS/PKCS #7 encrypted MIME. Supported values are aes, aes-gcm, des, 3des, and rc2. The default is aes. The aes-gcm option was added in version 10.0.0.

Hybrid encryption. S/MIME encrypts the MIME content with a symmetric content-encryption key. Each recipient certificate is then used to protect that content-encryption key. This property selects the symmetric algorithm; Pkcs7KeyLength selects its key length.

top
Pkcs7KeyLength
# $intVal is an integer
$intVal = $mime->get_Pkcs7KeyLength();
$mime->put_Pkcs7KeyLength($intVal);

Gets or sets the content-encryption key length, in bits, used when creating CMS/PKCS #7 encrypted MIME. The permitted value depends on Pkcs7CryptAlg.

AlgorithmAccepted key lengths
aes or aes-gcm128, 192, or 256
3des192
des40
rc240, 56, 64, or 128

top
Protocol
# $strVal is a string
# $ckStr is a CkString
$mime->get_Protocol($ckStr);
$strVal = $mime->protocol();
$mime->put_Protocol($strVal);

Gets or sets the protocol parameter of the Content-Type header field. This parameter is commonly used by multipart/signed to identify the media type of the detached signature part.

Content-Type: multipart/signed;
  protocol="application/pkcs7-signature";
  micalg=sha-256;
  boundary="example-boundary"
For this example, Protocol is application/pkcs7-signature.

top
SigningAlg
# $strVal is a string
# $ckStr is a CkString
$mime->get_SigningAlg($ckStr);
$strVal = $mime->signingAlg();
$mime->put_SigningAlg($strVal);
Introduced in version 9.5.0.67

Gets or sets the RSA signature scheme used when creating CMS/PKCS #7 signed MIME. The default is PKCS1-v1_5. Set the property to RSASSA-PSS or pss to use RSASSA-PSS.

This setting applies only when the signing private key is RSA. It does not select the signature scheme for EC or DSA keys. The property controls signature creation and is not updated during verification; use GetLastJsonData to inspect a verified signature.

More Information and Examples
top
SigningHashAlg
# $strVal is a string
# $ckStr is a CkString
$mime->get_SigningHashAlg($ckStr);
$strVal = $mime->signingHashAlg();
$mime->put_SigningHashAlg($strVal);

Gets or sets the message-digest algorithm used when creating CMS/PKCS #7 signatures. Supported values are sha1, sha256, sha384, sha512, md5, and md2.

This property controls signature creation only. It is not changed when a signature is verified. After verification, call GetLastJsonData to inspect the algorithms found in the signed data.

Security guidance. Use a SHA-2 algorithm such as sha256 unless interoperability with a legacy system requires otherwise. MD2, MD5, and SHA-1 are retained for compatibility with older signed messages.

top
UncommonOptions
# $strVal is a string
# $ckStr is a CkString
$mime->get_UncommonOptions($ckStr);
$strVal = $mime->uncommonOptions();
$mime->put_UncommonOptions($strVal);
Introduced in version 9.5.0.89

Gets or sets a semicolon-delimited or implementation-specific option string used for uncommon compatibility requirements. The default is the empty string, and normal applications should leave it empty. Options placed here may be version-specific and should be used only when directed by Chilkat documentation or support.

top
UnwrapExtras
# $boolVal is a boolean
$boolVal = $mime->get_UnwrapExtras();
$mime->put_UnwrapExtras($boolVal);

Controls whether UnwrapSecurity adds informative header fields describing the security layers that were removed. The default behavior should normally be retained unless the application requires a minimally modified unwrapped MIME message.

More Information and Examples
top
UseMmDescription
# $boolVal is a boolean
$boolVal = $mime->get_UseMmDescription();
$mime->put_UseMmDescription($boolVal);

Controls whether Chilkat uses the conventional multipart preamble text This is a multi-part message in MIME format. when serializing a multipart entity. The default is 0. The preamble is meaningful only when the multipart has content and is ignored by MIME-aware readers.

top
UseXPkcs7
# $boolVal is a boolean
$boolVal = $mime->get_UseXPkcs7();
$mime->put_UseXPkcs7($boolVal);

Controls whether newly created S/MIME media types use the historical x-pkcs7 names.

ValueGenerated media types
1 (default)application/x-pkcs7-mime and application/x-pkcs7-signature
0application/pkcs7-mime and application/pkcs7-signature
Interoperability. The x- forms are widely encountered in existing S/MIME messages. Both naming forms describe the same CMS/PKCS #7 content.

top
Utf8
# $boolVal is a boolean
$boolVal = $mime->get_Utf8();
$mime->put_Utf8($boolVal);

When set to 1, all string arguments and return values are interpreted as UTF-8 strings. When set to 0, they are interpreted as ANSI strings.

In Chilkat v11.0.0 and later, the default value is 1. Before v11.0.0, it was 0.

top
VerboseLogging
# $boolVal is a boolean
$boolVal = $mime->get_VerboseLogging();
$mime->put_VerboseLogging($boolVal);

If set to 1, then the contents of LastErrorText (or LastErrorXml, or LastErrorHtml) may contain more verbose information. The default value is 0. Verbose logging should only be used for debugging. The potentially large quantity of logged information may adversely affect peformance.

top
Version
# $strVal is a string
# $ckStr is a CkString
$mime->get_Version($ckStr);
$strVal = $mime->version();

Version of the component/library, such as "10.1.0"

More Information and Examples
top

Methods

AddContentLength
$mime->AddContentLength();

Computes the byte length of the current entity's serialized MIME body and adds or updates its Content-Length header. The count is based on the transfer-encoded serialized body, not the decoded payload.

For a multipart entity, the count includes boundary delimiter lines, child headers, child bodies, and the closing boundary. Only the current entity's header is updated; child parts do not receive Content-Length fields. Repeated calls recompute the value and leave a single header occurrence.

More Information and Examples
top
AddDecryptCert
# $cert is a CkCert
$status = $mime->AddDecryptCert($cert);
Introduced in version 9.5.0.40

Adds cert to the internal collection of certificates available for S/MIME decryption. The certificate must have access to its corresponding private key. Call this method once for each candidate certificate.

The collection is searched by decryption methods such as Decrypt and UnwrapSecurity. Other ways to provide decryption credentials include AddPfxSourceFile, AddPfxSourceBd, and UseCertVault.

Returns 1 for success, 0 for failure.

top
AddDetachedSignature
# $cert is a CkCert
$status = $mime->AddDetachedSignature($cert);

Creates an S/MIME detached signature using cert. The certificate must have access to its private key. On success, the current object becomes a multipart/signed entity with two direct children:

PartContents
FirstThe original MIME entity being signed.
SecondThe CMS/PKCS #7 signature data.

Use SigningHashAlg and, for RSA keys, SigningAlg to select the signing algorithms.

Detached signature. The original MIME content remains visible as the first multipart child. Altering its serialized bytes after signing invalidates the signature.

Returns 1 for success, 0 for failure.

top
AddDetachedSignature2
# $cert is a CkCert
# $transferHeaderFields is a boolean
$status = $mime->AddDetachedSignature2($cert, $transferHeaderFields);

Creates the same detached multipart/signed structure as AddDetachedSignature, with transferHeaderFields controlling whether the calling object's header fields are transferred to the first, signed content part while the outer multipart wrapper is created.

cert is the signing certificate and must have access to its private key.

Returns 1 for success, 0 for failure.

top
AddDetachedSignaturePk
# $cert is a CkCert
# $privateKey is a CkPrivateKey
$status = $mime->AddDetachedSignaturePk($cert, $privateKey);

Creates a detached S/MIME signature using cert as the signer certificate and privateKey as its associated private key. Use this method when the certificate and private key are supplied separately rather than combined in a PFX/P12 file or certificate object.

On success, the current object is transformed into the same two-part multipart/signed structure described by AddDetachedSignature.

Returns 1 for success, 0 for failure.

More Information and Examples
top
AddDetachedSignaturePk2
# $cert is a CkCert
# $privateKey is a CkPrivateKey
# $transferHeaderFields is a boolean
$status = $mime->AddDetachedSignaturePk2($cert, $privateKey, $transferHeaderFields);

Creates a detached S/MIME signature using the certificate in cert and the corresponding private key in privateKey. transferHeaderFields controls whether the calling object's header fields are transferred to the first, signed content part while the outer multipart/signed wrapper is created.

This is the separate-private-key counterpart of AddDetachedSignature2.

Returns 1 for success, 0 for failure.

top
AddEncryptCert
# $cert is a CkCert
$status = $mime->AddEncryptCert($cert);

Adds cert to the internal recipient-certificate list used by EncryptN. Call this method once for each intended recipient. Encryption uses the public key in each certificate, so recipient private keys are not required at encryption time.

Call ClearEncryptCerts to empty the list.

Returns 1 for success, 0 for failure.

top
AddHeaderField
# $name is a string
# $value is a string
$status = $mime->AddHeaderField($name, $value);

Appends a new header field named by name with the value in value. Existing fields having the same case-insensitive name are preserved. An empty value creates a legal empty-valued field.

Chilkat converts spaces in a header name to hyphens, removes embedded CR and LF characters from the value to prevent header injection, and folds long values when serializing.

Replacing versus appending. Use SetHeaderField to remove all existing occurrences and set one replacement value.

Returns 1 for success, 0 for failure.

More Information and Examples
top
AddPfxSourceBd
# $bd is a CkBinData
# $password is a string
$status = $mime->AddPfxSourceBd($bd, $password);
Introduced in version 11.0.0

Adds the PKCS #12/PFX bytes in bd to the internal collection of credential sources. password is the password protecting the PFX data. Call the method once for each PFX source that should be searched by later decryption or signing operations.

Credential source. Adding a PFX/P12 source does not immediately decrypt the message. It makes the contained certificates and private keys available to later decryption or signing operations.

Returns 1 for success, 0 for failure.

top
AddPfxSourceFile
# $pfxFilePath is a string
# $password is a string
$status = $mime->AddPfxSourceFile($pfxFilePath, $password);

Adds the PFX/P12 file at the local filesystem path in pfxFilePath to the internal collection of credential sources. password is the password protecting the file. Call the method once for each PFX source that should be searched.

Credential source. Adding a PFX/P12 source does not immediately decrypt the message. It makes the contained certificates and private keys available to later decryption or signing operations.

Returns 1 for success, 0 for failure.

top
AppendPart
# $mime is a CkMime
$status = $mime->AppendPart($mime);

Appends a copy of mime as the last direct child. Chilkat does not retain a reference to mime, so later changes to mime do not affect the appended part. The same source object may be appended more than once.

If the current object is not multipart, it is converted to multipart/mixed. The complete original entity, including its existing headers and body, becomes part 0; the copy of mime becomes part 1. The new outer entity contains its generated multipart Content-Type.

Editing an appended child. Retrieve it with PartAt. The object returned by PartAt is a live child, unlike the copied input to this method.

Returns 1 for success, 0 for failure.

More Information and Examples
top
AppendPartFromFile
# $filename is a string
$status = $mime->AppendPartFromFile($filename);

Reads the local file at filename, creates an attachment part, and appends it. Filename-extension matching is case-insensitive.

File kindGenerated headers
.txttext/plain; charset=windows-1252; format=flowed, 7bit, attachment filename and name
Known binary type, such as .PNGInferred media type such as image/png, base64, attachment filename and name
Unknown extensionapplication/octet-stream, base64, attachment filename and name

If the current object is not multipart, the same conversion described by AppendPart occurs. Calling this method on a new empty object therefore creates an empty part 0 and the file attachment as part 1.

Returns 1 for success, 0 for failure.

top
AsnBodyToXml
# $outStr is a CkString (output)
$status = $mime->AsnBodyToXml($outStr);
$retStr = $mime->asnBodyToXml();

Parses the current part's decoded body as ASN.1 DER and returns an XML representation of the ASN.1 structure. This is primarily useful for inspecting CMS/PKCS #7 bodies such as application/pkcs7-mime or application/x-pkcs7-mime.

Content-Type: application/pkcs7-mime; smime-type=signed-data
Content-Transfer-Encoding: base64

MII...
Diagnostic conversion. The returned XML exposes ASN.1 tags, object identifiers, and values for inspection. It is not the MIME-to-XML representation returned by GetXml.

Returns 1 for success, 0 for failure.

top
ClearEncryptCerts
$mime->ClearEncryptCerts();

Clears the internal recipient-certificate list populated by AddEncryptCert. A subsequent call to EncryptN requires certificates to be added again.

top
ContainsEncryptedParts
$retBool = $mime->ContainsEncryptedParts();

Returns 1 if the currently visible MIME tree contains a CMS/PKCS #7 encrypted part.

Encrypted layers hide their contents. This method examines the MIME structure as it currently exists. It cannot report signed or encrypted entities nested inside ciphertext until UnwrapSecurity successfully decrypts the enclosing layer.

More Information and Examples
top
ContainsSignedParts
$retBool = $mime->ContainsSignedParts();

Returns 1 if the currently visible MIME tree contains a detached or opaque CMS/PKCS #7 signed part.

Encrypted layers hide their contents. A signature nested inside encrypted data is not visible until the encrypted layer is successfully removed by UnwrapSecurity. After security layers are unwrapped, this method may return 0 because the signed wrapper has been removed.

More Information and Examples
top
Convert8Bit
$mime->Convert8Bit();

Recursively converts every part whose Content-Transfer-Encoding is 8bit or binary to base64. Both the child object's Encoding property and the serialized header are updated. Parts using 7bit or another encoding are unchanged.

More Information and Examples
top
ConvertToMultipartAlt
$status = $mime->ConvertToMultipartAlt();

Wraps the current entity in a new outer multipart/alternative entity. The original entity becomes the first and initially only child.

The new outer entity retains message-level and custom headers such as MIME-Version, Date, Subject, From, To, Content-ID, Content-Location, and custom fields. The original Content-Type, Content-Transfer-Encoding, Content-Disposition, and body move to the first child. An existing charset parameter is retained on the new multipart Content-Type. Calling the method again wraps the existing multipart in another multipart layer; the operation is not idempotent.

Alternative ordering. Additional representations can be appended with AppendPart. Conventionally, alternatives are ordered from least rich to most rich, such as text/plain followed by text/html.

Returns 1 for success, 0 for failure.

top
ConvertToMultipartMixed
$status = $mime->ConvertToMultipartMixed();

Wraps the current entity in a new outer multipart/mixed entity. The original entity becomes the first and initially only child.

The new outer entity retains message-level and custom headers such as MIME-Version, Date, Subject, From, To, Content-ID, Content-Location, and custom fields. The original Content-Type, Content-Transfer-Encoding, Content-Disposition, and body move to the first child. An existing charset parameter is retained on the new multipart Content-Type. Calling the method again wraps the existing multipart in another multipart layer; the operation is not idempotent.

Returns 1 for success, 0 for failure.

More Information and Examples
top
ConvertToSigned
# $cert is a CkCert
$status = $mime->ConvertToSigned($cert);

Creates an opaque (attached) S/MIME signature using cert. The certificate must have access to its private key. On success, the current MIME entity is replaced by CMS/PKCS #7 signed-data containing both the original MIME bytes and the signature.

This differs from AddDetachedSignature, which creates a visible multipart/signed wrapper with a separate signature part.

Returns 1 for success, 0 for failure.

top
ConvertToSignedPk
# $cert is a CkCert
# $privateKey is a CkPrivateKey
$status = $mime->ConvertToSignedPk($cert, $privateKey);

Creates an opaque (attached) S/MIME signature using cert as the signer certificate and privateKey as its associated private key. Use this method when the certificate and private key are supplied separately.

The resulting CMS/PKCS #7 signed-data contains the original MIME entity and its signature. For a detached multipart/signed result, use AddDetachedSignaturePk.

Returns 1 for success, 0 for failure.

More Information and Examples
top
Decrypt
$status = $mime->Decrypt();

Decrypts the current CMS/PKCS #7 encrypted MIME entity and replaces it with the recovered MIME content. Chilkat identifies the intended recipient from the CMS recipient information and searches the configured credential sources for the matching certificate and private key.

SourceHow it is supplied
Explicit certificateAddDecryptCert or DecryptUsingCert
PFX/P12AddPfxSourceFile, AddPfxSourceBd, or a DecryptUsingPfx... method
Certificate vaultUseCertVault
Platform certificate storeWindows certificate stores and the macOS Keychain are searched automatically where supported
CMS recipient information. Encrypted S/MIME normally contains recipient identifiers and encrypted content-encryption keys. The recipient private key is required to recover the content; the private key is never embedded in the message.

Returns 1 for success, 0 for failure.

top
Decrypt2
# $cert is a CkCert
# $privateKey is a CkPrivateKey
$status = $mime->Decrypt2($cert, $privateKey);

Decrypts the current CMS/PKCS #7 encrypted MIME entity using the certificate in cert and its associated private key in privateKey. On success, the current object is replaced by the recovered MIME content.

Use this method when the certificate and private key are stored separately. Use Decrypt when Chilkat should locate the credential from configured sources.

Returns 1 for success, 0 for failure.

top
DecryptUsingCert
# $cert is a CkCert
$status = $mime->DecryptUsingCert($cert);
Introduced in version 9.5.0.40

Decrypts the current CMS/PKCS #7 encrypted MIME entity using cert. The certificate must have access to its corresponding private key. On success, the encrypted wrapper is replaced by the recovered MIME content.

Returns 1 for success, 0 for failure.

top
DecryptUsingPfxFile
# $pfxFilePath is a string
# $pfxPassword is a string
$status = $mime->DecryptUsingPfxFile($pfxFilePath, $pfxPassword);

Decrypts the current CMS/PKCS #7 encrypted MIME entity using certificates and private keys from the PFX/P12 file at the local filesystem path in pfxFilePath. pfxPassword is the password protecting the file.

On success, the encrypted wrapper is replaced by the recovered MIME content.

Returns 1 for success, 0 for failure.

More Information and Examples
top
Encrypt
# $cert is a CkCert
$status = $mime->Encrypt($cert);

Encrypts the current MIME entity for the recipient certificate in cert and replaces it with CMS/PKCS #7 encrypted S/MIME. Only the recipient's public key is needed to encrypt; the corresponding private key is required later to decrypt.

The content-encryption algorithm is selected by Pkcs7CryptAlg and Pkcs7KeyLength. For RSA recipients, OaepPadding, OaepHash, and OaepMgfHash control key transport.

Envelope encryption. The MIME content is encrypted once with a symmetric key. The recipient certificate protects that symmetric key, allowing only the holder of the matching private key to decrypt the message.

Returns 1 for success, 0 for failure.

top
EncryptN
$status = $mime->EncryptN();

Encrypts the current MIME entity for every certificate previously added with AddEncryptCert. Each recipient receives independently protected access to the same encrypted content.

Add one certificate per intended recipient, call this method, and use ClearEncryptCerts before preparing a different recipient set.

Returns 1 for success, 0 for failure.

top
GetBodyBd
# $binDat is a CkBinData
$status = $mime->GetBodyBd($binDat);
Introduced in version 9.5.0.67

Replaces the contents of binDat with the decoded body bytes of the current part. Existing bytes in binDat are discarded. Base64 and quoted-printable are decoded. MIME headers, multipart boundaries, and child parts are not included.

Returns 1 for success, 0 for failure.

top
GetBodyDecoded
# $outStr is a CkString (output)
$status = $mime->GetBodyDecoded($outStr);
$retStr = $mime->getBodyDecoded();

Returns the decoded body as text. Chilkat first decodes the Content-Transfer-Encoding and then interprets text according to the declared charset.

Use a byte-oriented getter for binary content. A string result cannot reliably represent arbitrary binary bytes or embedded NUL bytes. Use GetBodyBd or GetBodyBinary for binary payloads.

Returns 1 for success, 0 for failure.

top
GetBodyEncoded
# $outStr is a CkString (output)
$status = $mime->GetBodyEncoded($outStr);
$retStr = $mime->getBodyEncoded();

Returns the current part's transfer-encoded body text without decoding Base64 or quoted-printable. The returned value is Chilkat's normalized serialization of the body, not necessarily the exact text that appeared in the loaded MIME. For example, Base64 padding and line wrapping or quoted-printable spelling may be regenerated.

Returns 1 for success, 0 for failure.

top
GetDecryptCertInfo
# $certInfo is a CkJsonObject
$status = $mime->GetDecryptCertInfo($certInfo);
Introduced in version 11.4.0

Examines the current encrypted S/MIME entity and writes information about the required recipient certificate or certificates to the JsonObject in certInfo. This can be used to identify which certificate and private key must be made available before calling Decrypt or UnwrapSecurity.

No private key is revealed. The encrypted message contains recipient identifiers and encrypted key material, not the recipient private keys. This method reports identifying information available from the CMS recipient records.

Returns 1 for success, 0 for failure.

More Information and Examples
top
GetEntireBody
# $outStr is a CkString (output)
$status = $mime->GetEntireBody($outStr);
$retStr = $mime->getEntireBody();

Returns the complete serialized body of the current MIME entity. For multipart MIME, this includes boundary delimiters, each child part's headers and body, and the closing boundary. The current entity's own header fields are not included.

Use GetBodyDecoded when the decoded payload of a single part is needed.

Returns 1 for success, 0 for failure.

More Information and Examples
top
GetEntireHead
# $outStr is a CkString (output)
$status = $mime->GetEntireHead($outStr);
$retStr = $mime->getEntireHead();

Returns the complete serialized header section of the current MIME entity. The body and any multipart child content are not included.

Returns 1 for success, 0 for failure.

More Information and Examples
top
GetHeaderField
# $fieldName is a string
# $outStr is a CkString (output)
$status = $mime->GetHeaderField($fieldName, $outStr);
$retStr = $mime->getHeaderField($fieldName);

Returns the value of the first header field whose name matches fieldName case-insensitively. Duplicate later occurrences are not combined. Returns null when no matching field exists.

Returns 1 for success, 0 for failure.

More Information and Examples
top
GetHeaderFieldAttribute
# $name is a string
# $attrName is a string
# $outStr is a CkString (output)
$status = $mime->GetHeaderFieldAttribute($name, $attrName, $outStr);
$retStr = $mime->getHeaderFieldAttribute($name, $attrName);

Returns an attribute value parsed from the first header field named by name. Both the header name and attrName attribute name are matched case-insensitively. Surrounding quotation marks are removed, and semicolons inside a quoted value are handled as part of the value.

Extended parameters such as filename*=utf-8''r%C3%A9sum%C3%A9.txt are returned in their raw encoded form; this method does not percent-decode or apply the declared charset. Returns null when the field or attribute is absent.

Returns 1 for success, 0 for failure.

More Information and Examples
top
GetHeaderFieldName
# $index is an integer
# $outStr is a CkString (output)
$status = $mime->GetHeaderFieldName($index, $outStr);
$retStr = $mime->getHeaderFieldName($index);

Returns the name of the header-field occurrence at zero-based index. Header order and original casing are preserved for ordinary loaded headers. Use NumHeaderFields to determine the valid range.

Returns 1 for success, 0 for failure.

top
GetHeaderFieldValue
# $index is an integer
# $outStr is a CkString (output)
$status = $mime->GetHeaderFieldValue($index, $outStr);
$retStr = $mime->getHeaderFieldValue($index);

Returns the unfolded value of the header-field occurrence at zero-based index. Continuation lines are combined into a single value. Use NumHeaderFields to determine the valid range.

Returns 1 for success, 0 for failure.

top
GetLastJsonData
# $json is a CkJsonObject
$mime->GetLastJsonData($json);
Introduced in version 9.5.0.69

Copies structured details from the most recent operation into json when such details are available. Many methods do not produce JSON data. Methods involving CMS/PKCS #7 security, such as UnwrapSecurity, may report algorithms, certificates, recipients, signatures, and validation results.

Read immediately. The information describes the most recent applicable call on this object and can be replaced by a later operation.

top
GetMime
# $outStr is a CkString (output)
$status = $mime->GetMime($outStr);
$retStr = $mime->getMime();

Serializes and returns the complete MIME entity, including headers, body, multipart boundaries, and all descendants.

Serialization is normalized. The result is semantically equivalent MIME, not a byte-for-byte copy of loaded input. Chilkat can unfold headers, normalize parameter quoting and transfer encodings, discard multipart preamble and epilogue text, and generate CRLF for headers and multipart framing. Existing body line endings may not always be rewritten.

Returns 1 for success, 0 for failure.

top
GetMimeBd
# $bindat is a CkBinData
$status = $mime->GetMimeBd($bindat);
Introduced in version 9.5.0.62

Serializes the complete MIME entity and appends its bytes to bindat. Existing BinData bytes are preserved. Use this method when arbitrary binary body bytes must not pass through a text string.

Serialization is normalized. The result is semantically equivalent MIME, not a byte-for-byte copy of loaded input. Chilkat can unfold headers, normalize parameter quoting and transfer encodings, discard multipart preamble and epilogue text, and generate CRLF for headers and multipart framing. Existing body line endings may not always be rewritten.

Returns 1 for success, 0 for failure.

More Information and Examples
top
GetMimeSb
# $sb is a CkStringBuilder
$status = $mime->GetMimeSb($sb);
Introduced in version 9.5.0.62

Serializes the complete MIME entity and appends it to sb. Existing StringBuilder content is preserved.

Serialization is normalized. The result is semantically equivalent MIME, not a byte-for-byte copy of loaded input. Chilkat can unfold headers, normalize parameter quoting and transfer encodings, discard multipart preamble and epilogue text, and generate CRLF for headers and multipart framing. Existing body line endings may not always be rewritten.

Returns 1 for success, 0 for failure.

More Information and Examples
top
GetSignatureSigningTimeStr
# $index is an integer
# $outStr is a CkString (output)
$status = $mime->GetSignatureSigningTimeStr($index, $outStr);
$retStr = $mime->getSignatureSigningTimeStr($index);

Returns the CMS signingTime signed attribute for the signer at zero-based index, formatted as an RFC 822-style date string. For example:

Fri, 21 Nov 1997 09:55:06 -0600

Call HasSignatureSigningTime first because the attribute is optional. Use NumSignerCerts for the signer count.

Signing time is not a trusted timestamp. The CMS signingTime value is supplied by the signer. It is different from a timestamp token issued and signed by a trusted timestamp authority.

Returns 1 for success, 0 for failure.

top
GetStructure
# $fmt is a string
# $outStr is a CkString (output)
$status = $mime->GetStructure($fmt, $outStr);
$retStr = $mime->getStructure($fmt);
Introduced in version 9.5.0.56

Returns a concise MIME-tree summary. fmt is case-insensitive. The value xml selects XML output; all other values, including text, an empty string, or an unrecognized value, select the indented text format.

multipart/mixed
    text/plain
    application/octet-stream
<multipart-mixed>
    <text-plain />
    <application-octet-stream />
</multipart-mixed>

Returns 1 for success, 0 for failure.

More Information and Examples
top
GetXml
# $outStr is a CkString (output)
$status = $mime->GetXml($outStr);
$retStr = $mime->getXml();

Converts the MIME tree to Chilkat's XML representation and returns it as a string. Header names become XML element names, structured header parameters become XML attributes, duplicate headers become repeated elements, multipart children are nested in subpart elements, and binary bodies are represented in an encoded textual form.

XML round-tripping is semantic. Loading this XML reconstructs an equivalent MIME tree, but it is not byte-preserving and header names are normalized to lowercase.

Returns 1 for success, 0 for failure.

More Information and Examples
top
HasSignatureSigningTime
# $index is an integer
$retBool = $mime->HasSignatureSigningTime($index);

Returns 1 if the signer at zero-based index has a CMS signingTime signed attribute. Use NumSignerCerts for the signer count and GetSignatureSigningTimeStr to retrieve the value.

top
IsApplicationData
$retBool = $mime->IsApplicationData();

Returns 1 when ContentType begins with application/. It returns 0 for an empty or malformed media type.

top
IsAttachment
$retBool = $mime->IsAttachment();

Returns 1 when the current part's disposition value is attachment, matched case-insensitively. Parameters such as filename do not affect the test. An inline part remains non-attachment even when it has a filename.

top
IsAudio
$retBool = $mime->IsAudio();

Returns 1 when ContentType begins with audio/.

top
IsEncrypted
$retBool = $mime->IsEncrypted();

Returns 1 when the current MIME entity is a CMS/PKCS #7 encrypted S/MIME wrapper. To search the visible MIME tree rather than only the current entity, use ContainsEncryptedParts.

top
IsHtml
$retBool = $mime->IsHtml();

Returns 1 when ContentType is text/html. The ContentType property must contain only the media type; set parameters such as charset separately.

top
IsImage
$retBool = $mime->IsImage();

Returns 1 when ContentType begins with image/, including values such as image/svg+xml.

top
IsMultipart
$retBool = $mime->IsMultipart();

Returns 1 when ContentType begins with multipart/.

top
IsMultipartAlternative
$retBool = $mime->IsMultipartAlternative();

Returns 1 when ContentType is multipart/alternative.

top
IsMultipartMixed
$retBool = $mime->IsMultipartMixed();

Returns 1 when ContentType is multipart/mixed.

top
IsMultipartRelated
$retBool = $mime->IsMultipartRelated();

Returns 1 when ContentType is multipart/related.

top
IsPlainText
$retBool = $mime->IsPlainText();

Returns 1 when ContentType is text/plain.

top
IsSigned
$retBool = $mime->IsSigned();

Returns 1 when the current MIME entity is a CMS/PKCS #7 signed S/MIME wrapper, including detached multipart/signed and opaque signed-data forms. To search the visible MIME tree, use ContainsSignedParts.

top
IsText
$retBool = $mime->IsText();

Returns 1 when ContentType begins with text/.

top
IsVideo
$retBool = $mime->IsVideo();

Returns 1 when ContentType begins with video/.

top
IsXml
$retBool = $mime->IsXml();

Returns 1 only for text/xml or application/xml. It does not classify structured-suffix media types such as application/soap+xml, application/atom+xml, or image/svg+xml as XML.

top
LastDecryptCert
# $index is an integer
# $cert is a CkCert
$status = $mime->LastDecryptCert($index, $cert);
Introduced in version 11.0.0

Loads into cert the decryption certificate at zero-based index from the most recent security-unwrapping operation. Valid indexes range from 0 through NumDecryptCerts - 1.

Returns 1 for success, 0 for failure.

top
LastSignerCert
# $index is an integer
# $cert is a CkCert
$status = $mime->LastSignerCert($index, $cert);
Introduced in version 11.0.0

Loads into cert the signer certificate at zero-based index from the most recent signature-verification or security-unwrapping operation. Valid indexes range from 0 through NumSignerCerts - 1.

Returns 1 for success, 0 for failure.

top
LoadMime
# $mimeMsg is a string
$status = $mime->LoadMime($mimeMsg);

Parses the complete MIME text in mimeMsg and replaces the current object's headers, body, and multipart tree. A successful call always replaces the previous MIME.

If no blank line separates headers from the body, lines that appear header-like are parsed as headers and the body is empty. Data after the header/body separator belongs to the body.

Permissive parser and normalized output. Chilkat accepts many imperfect messages. Observed behavior includes ignoring malformed header lines and leading non-header text, using the last duplicate Content-Type, repairing a missing multipart closing delimiter during serialization, treating unmatched boundary-like text as an ordinary body, and tolerating malformed Base64 or quoted-printable. LF-only and CR-only input are accepted; generated headers and multipart framing use CRLF. Loading and reserializing is therefore not guaranteed to reproduce the original bytes, and multipart preamble and epilogue text are not retained.
Text input is not a raw-byte container. Use LoadMimeBd or LoadMimeBytes for arbitrary 8-bit bytes or embedded NUL bytes.

Returns 1 for success, 0 for failure.

top
LoadMimeBd
# $bindat is a CkBinData
$status = $mime->LoadMimeBd($bindat);
Introduced in version 9.5.0.62

Parses complete MIME bytes from bindat and replaces the current MIME on success. This is the preferred loader when the MIME can contain arbitrary 8-bit body bytes or embedded NUL bytes. Parsing tolerance and serialization normalization are the same as LoadMime.

Returns 1 for success, 0 for failure.

top
LoadMimeFile
# $fileName is a string
$status = $mime->LoadMimeFile($fileName);

Reads and parses the complete MIME entity from the local file at fileName. A successful call replaces the current MIME. If the file cannot be opened, the method returns 0 and preserves the existing object unchanged.

Parsing tolerance and serialization normalization are the same as LoadMime.

Returns 1 for success, 0 for failure.

top
LoadMimeSb
# $sb is a CkStringBuilder
$status = $mime->LoadMimeSb($sb);
Introduced in version 9.5.0.62

Parses complete MIME text from sb and replaces the current MIME on success. Parsing tolerance and serialization normalization are the same as LoadMime.

Use byte input for arbitrary MIME bytes. A StringBuilder is text-oriented. Use LoadMimeBd for binary MIME containing arbitrary 8-bit values or NUL bytes.

Returns 1 for success, 0 for failure.

More Information and Examples
top
LoadXml
# $xml is a string
$status = $mime->LoadXml($xml);

Reconstructs a MIME tree from Chilkat's MIME XML in xml. On success, the current object is replaced. If the XML is invalid, the method returns 0 and preserves the existing MIME unchanged.

The reconstructed MIME is semantically equivalent but not byte-identical to the MIME that produced the XML. Header names are normalized to lowercase.

Returns 1 for success, 0 for failure.

top
LoadXmlFile
# $fileName is a string
$status = $mime->LoadXmlFile($fileName);

Reads Chilkat MIME XML from the local file at fileName and reconstructs the MIME tree. On success, the current object is replaced. If the file cannot be opened or the XML is invalid, the method returns 0 and preserves the existing MIME unchanged. Header names are normalized to lowercase during reconstruction.

Returns 1 for success, 0 for failure.

top
NewMessageRfc822
# $mimeObject is a CkMime
$status = $mime->NewMessageRfc822($mimeObject);

Clears the current object and initializes it as message/rfc822. Its body is a serialized copy of mimeObject at the time of the call. Later modifications to mimeObject do not change the embedded message.

Returns 1 for success, 0 for failure.

top
NewMultipartAlternative
$status = $mime->NewMultipartAlternative();

Initializes an empty multipart/alternative entity. Clears all existing headers, body content, and child parts. The new object contains only a multipart Content-Type with an automatically generated boundary, has zero parts, and does not automatically add MIME-Version.

Returns 1 for success, 0 for failure.

More Information and Examples
top
NewMultipartMixed
$status = $mime->NewMultipartMixed();

Initializes an empty multipart/mixed entity. Clears all existing headers, body content, and child parts. The new object contains only a multipart Content-Type with an automatically generated boundary, has zero parts, and does not automatically add MIME-Version.

Returns 1 for success, 0 for failure.

top
NewMultipartRelated
$status = $mime->NewMultipartRelated();

Initializes an empty multipart/related entity. Clears all existing headers, body content, and child parts. The new object contains only a multipart Content-Type with an automatically generated boundary, has zero parts, and does not automatically add MIME-Version.

Returns 1 for success, 0 for failure.

More Information and Examples
top
PartAt
# $index is an integer
# $subPart is a CkMime
$status = $mime->PartAt($index, $subPart);
Introduced in version 11.0.0

Provides live access to the direct child at zero-based index through subPart. Modifying subPart after a successful call modifies the child stored in the parent MIME tree.

Valid indexes range from 0 through NumParts - 1. An invalid index returns 0 and preserves subPart unchanged.

Different from AppendPart. AppendPart stores a copy of its argument. This method exposes the actual stored child.

Returns 1 for success, 0 for failure.

top
PartsToFiles
# $path is a string
# $st is a CkStringTable
$status = $mime->PartsToFiles($path, $st);
Introduced in version 11.0.0

Recursively traverses the MIME tree and saves each part having a nonempty filename parameter to the existing directory in path. A name parameter alone is not used as a fallback. The disposition may be attachment or inline; a filename is what controls extraction.

  • Only the final path component of a MIME filename is used. Directory components, absolute paths, and .. traversal are discarded.
  • On Windows, invalid filename characters are replaced with underscores.
  • Duplicate filenames target the same path; later parts overwrite earlier parts.
  • st is appended to rather than cleared. Each added entry is the full path actually written, including any sanitized filename.
  • The destination directory is not created. If it does not exist, the method returns 0, creates no files, and appends nothing to st.
Treat MIME filenames as untrusted. Use a controlled destination directory and apply any application-specific policy for file types, size limits, overwriting, and renaming.

Returns 1 for success, 0 for failure.

top
RemoveHeaderField
# $fieldName is a string
# $bAllOccurrences is a boolean
$mime->RemoveHeaderField($fieldName, $bAllOccurrences);

Removes fields whose name matches fieldName case-insensitively. If bAllOccurrences is 0, only the first matching occurrence is removed. If bAllOccurrences is 1, all matching occurrences are removed. Remaining fields retain their relative order.

More Information and Examples
top
RemovePart
# $index is an integer
$status = $mime->RemovePart($index);

Removes the direct child at zero-based index. Valid indexes range from 0 through NumParts - 1. An out-of-range index returns 0 and leaves the tree unchanged.

Returns 1 for success, 0 for failure.

top
SaveBody
# $filename is a string
$status = $mime->SaveBody($filename);

Writes the decoded body bytes of the current part to the local path in filename. Base64 and quoted-printable are decoded. MIME headers and multipart framing are not written.

File behavior. Existing files are overwritten. Parent directories are not created, and passing a directory as the destination fails. On Windows, an existing read-only file is replaced and the read-only attribute is removed.

Returns 1 for success, 0 for failure.

top
SaveMime
# $filename is a string
$status = $mime->SaveMime($filename);

Serializes the complete MIME entity and writes it to the local path in filename, including headers, body, multipart boundaries, and all descendants.

Serialization is normalized. The result is semantically equivalent MIME, not a byte-for-byte copy of loaded input. Chilkat can unfold headers, normalize parameter quoting and transfer encodings, discard multipart preamble and epilogue text, and generate CRLF for headers and multipart framing. Existing body line endings may not always be rewritten.
File behavior. Existing files are overwritten. Parent directories are not created, and passing a directory as the destination fails. On Windows, an existing read-only file is replaced and the read-only attribute is removed.

Returns 1 for success, 0 for failure.

top
SaveXml
# $filename is a string
$status = $mime->SaveXml($filename);

Writes Chilkat's MIME XML representation to the local path in filename. The file can be loaded by LoadXmlFile.

File behavior. Existing files are overwritten. Parent directories are not created, and passing a directory as the destination fails. On Windows, an existing read-only file is replaced and the read-only attribute is removed.

Returns 1 for success, 0 for failure.

top
SetBody
# $str is a string
$mime->SetBody($str);

Sets the current part's body from str while preserving existing content headers such as Content-Type, charset, and Content-Transfer-Encoding.

Multipart entities serialize their child parts. Calling this method on a multipart object changes what the body getter methods return, but the assigned body is not included in the serialized multipart output while child parts are present. Build multipart content through AppendPart and PartAt.

More Information and Examples
top
SetBodyBd
# $bd is a CkBinData
$status = $mime->SetBodyBd($bd);
Introduced in version 11.0.0

Sets the decoded body bytes from bd, changes Content-Transfer-Encoding to base64, and preserves the bytes exactly. It does not set a Content-Type, disposition, filename, or name; set those separately when needed.

Returns 1 for success, 0 for failure.

top
SetBodyFromEncoded
# $encoding is a string
# $str is a string
$status = $mime->SetBodyFromEncoded($encoding, $str);

Sets the body from transfer-encoded text. encoding must be base64 or quoted-printable; other values, including 7bit, 8bit, binary, an unknown name, or an empty string, cause failure.

Base64 whitespace is accepted and the stored representation is normalized. Invalid Base64 causes the method to return 0. On any failure, all existing headers and body content are preserved unchanged.

Do not encode twice. str must already be in the encoding named by encoding. To provide decoded bytes, use SetBodyBd or SetBodyFromBinary.

Returns 1 for success, 0 for failure.

More Information and Examples
top
SetBodyFromFile
# $fileName is a string
$status = $mime->SetBodyFromFile($fileName);

Reads the local file at fileName and replaces the current part's body and content headers according to the filename extension.

File kindResult
.txttext/plain; charset=windows-1252; format=flowed, 7bit
.htmltext/html; charset=windows-1252, 7bit
Unknown extensionapplication/octet-stream, base64, attachment, and filename/name parameters based on the local filename

If the file cannot be opened, the method returns 0 and preserves the existing MIME unchanged.

Returns 1 for success, 0 for failure.

More Information and Examples
top
SetBodyFromHtml
# $str is a string
$status = $mime->SetBodyFromHtml($str);

Sets str as HTML and changes the media type to text/html. For ASCII input, Chilkat uses Content-Transfer-Encoding: 7bit and does not add a charset. Existing unrelated headers are preserved.

Returns 1 for success, 0 for failure.

top
SetBodyFromPlainText
# $str is a string
$status = $mime->SetBodyFromPlainText($str);

Sets str as plain text. For ASCII input, Chilkat sets Content-Type: text/plain; format=flowed and Content-Transfer-Encoding: 7bit without a charset. For non-ASCII UTF-8 input, it sets charset=utf-8 and uses 8bit. Existing unrelated headers are preserved.

Returns 1 for success, 0 for failure.

top
SetBodyFromXml
# $str is a string
$status = $mime->SetBodyFromXml($str);

Sets str as XML, changes the media type to text/xml, and selects a transfer encoding appropriate for the text. For ASCII input, Chilkat uses 7bit and does not add a charset.

The XML declaration's encoding value is not copied to the MIME charset parameter.

Different from LoadXml. This method places an XML document in the MIME body. LoadXml reconstructs an entire MIME object from Chilkat MIME XML.

Returns 1 for success, 0 for failure.

More Information and Examples
top
SetHeaderField
# $name is a string
# $value is a string
$status = $mime->SetHeaderField($name, $value);

Sets one header field named by name. Matching is case-insensitive. All existing occurrences are removed and one replacement is inserted. If no field exists, a new one is added. Passing an empty value removes all matching occurrences rather than creating an empty-valued field.

Use AddHeaderField to append another occurrence or to create an empty-valued field.

Returns 1 for success, 0 for failure.

More Information and Examples
top
SetVerifyCert
# $cert is a CkCert
$status = $mime->SetVerifyCert($cert);

Sets cert as an explicitly supplied signer certificate for subsequent signature verification. This is useful when the CMS/PKCS #7 signature does not embed the signer certificate or when the application must require a particular certificate.

The certificate's public key is used for verification; a private key is not required.

Returns 1 for success, 0 for failure.

top
UnwrapSecurity
$status = $mime->UnwrapSecurity();

Recursively removes all visible S/MIME security layers from the MIME tree. It decrypts encrypted parts and verifies detached or opaque signatures, continuing through nested layers until no additional supported security wrapper remains.

On success, the object contains the original MIME structure and content from before signing and encryption. The method returns 1 only when every required decryption and signature verification succeeds.

After the callUse
NumSignerCerts and LastSignerCertInspect the certificates associated with verified signatures.
NumDecryptCerts and LastDecryptCertInspect certificates associated with decryption.
GetLastJsonDataInspect algorithms and other operation details.
Order matters. For a message that was signed and then encrypted, the encrypted layer must be removed before the inner signature can be seen and verified. This method handles such nesting automatically.

Returns 1 for success, 0 for failure.

More Information and Examples
top
UrlEncodeBody
# $charset is a string
$mime->UrlEncodeBody($charset);

Replaces the current body with an application/x-www-form-urlencoded-style representation using the character set named by charset. Spaces become +, a literal plus becomes %2B, non-ASCII bytes become %HH sequences, and separators such as & and = remain unchanged.

Input:  a b+c&d=e
Output: a+b%2Bc&d=e

The MIME content headers are not changed. If the named character set is unsupported, the body remains unchanged.

Not a MIME transfer encoding. This operation is distinct from base64 and quoted-printable.

top
UseCertVault
# $vault is a CkXmlCertVault
$status = $mime->UseCertVault($vault);

Sets vault as the certificate vault used to locate certificates and private keys for S/MIME encryption, decryption, signing, and verification. Only one vault is active; each call replaces the previously configured vault.

Use XmlCertVault when credentials are maintained independently of platform certificate stores or individual PFX sources.

Returns 1 for success, 0 for failure.

top
Verify
$status = $mime->Verify();

Verifies the current CMS/PKCS #7 signed MIME entity and removes the signature wrapper. Both detached multipart/signed messages and opaque CMS signed-data are supported. On success, the object is restored to the MIME structure and content that was signed.

The signer certificate is commonly embedded in the signature. If it is absent, Chilkat searches configured or platform certificate sources, or uses a certificate supplied by SetVerifyCert.

What verification proves. Cryptographic verification establishes that the signed bytes have not changed and that the signature matches the signer certificate. Application trust decisions may additionally require validating the certificate chain, identity, usage, and revocation status.

Returns 1 for success, 0 for failure.

top

Deprecated

NumEncryptCerts
# $intVal is an integer
$intVal = $mime->get_NumEncryptCerts();
This property is deprecated. It will be removed in a future version.

Deprecated. Use NumDecryptCerts instead.

Returns the number of decryption certificates recorded by the most recent S/MIME security-unwrapping operation. The property is populated by UnwrapSecurity.

top
AddPfxSourceData Deprecated
# $pfxFileData is a CkByteData
# $pfxPassword is a string
$status = $mime->AddPfxSourceData($pfxFileData, $pfxPassword);

Legacy byte-array method. Adds the PKCS #12/PFX data in pfxFileData to the internal collection of credential sources. pfxPassword is the password protecting the PFX. Call the method once for each PFX source that should be searched.

Prefer AddPfxSourceBd when a BinData object is available.

Credential source. Adding a PFX/P12 source does not immediately decrypt the message. It makes the contained certificates and private keys available to later decryption or signing operations.

Returns 1 for success, 0 for failure.

top
DecryptUsingPfxData Deprecated
# $pfxData is a CkByteData
# $password is a string
$status = $mime->DecryptUsingPfxData($pfxData, $password);

Legacy byte-array method. Decrypts the current CMS/PKCS #7 encrypted MIME entity using certificates and private keys from the PFX/P12 bytes in pfxData. password is the password protecting the PFX data.

On success, the encrypted wrapper is replaced by the recovered MIME content.

Returns 1 for success, 0 for failure.

top
ExtractPartsToFiles
# returns a CkStringArray
# $dirPath is a string
$ret_stringArray = $mime->ExtractPartsToFiles($dirPath);
This method is deprecated and replaced by PartsToFiles

Deprecated. Applications should call PartsToFiles.

This method recursively saves parts having a nonempty filename parameter to the existing directory in dirPath and returns a StringArray containing the created paths. See PartsToFiles for the current extraction and filename-handling rules.

Returns null on failure

More Information and Examples
top
FindIssuer
# returns a CkCert
# $cert is a CkCert
$ret_cert = $mime->FindIssuer($cert);
This method is deprecated.

Deprecated. Use the certificate object's GetIssuer method instead.

Finds the issuer of cert. If cert is self-issued or a root certificate, the returned object is a copy of cert.

Returns null on failure

top
GetBodyBinary Deprecated
# $outData is a CkByteData (output)
$status = $mime->GetBodyBinary($outData);

Returns the decoded body bytes of the current part. Base64 and quoted-printable are decoded, but no MIME headers or multipart framing are included. This legacy byte-array method preserves arbitrary bytes, including embedded NUL bytes.

Returns 1 for success, 0 for failure.

top
GetEncryptCert
# returns a CkCert
# $index is an integer
$ret_cert = $mime->GetEncryptCert($index);
This method is deprecated and replaced by LastDecryptCert

Deprecated. Use LastDecryptCert instead.

Returns the certificate at zero-based index from the certificates recorded by the most recent decryption operation. Use NumDecryptCerts for the count.

Returns null on failure

More Information and Examples
top
GetMimeBytes Deprecated
# $outBytes is a CkByteData (output)
$status = $mime->GetMimeBytes($outData);

Returns the complete serialized MIME entity as a byte array. This preserves binary body bytes that cannot safely pass through a string.

Serialization is normalized. The result is semantically equivalent MIME, not a byte-for-byte copy of loaded input. Chilkat can unfold headers, normalize parameter quoting and transfer encodings, discard multipart preamble and epilogue text, and generate CRLF for headers and multipart framing. Existing body line endings may not always be rewritten.

Returns 1 for success, 0 for failure.

top
GetPart
# returns a CkMime
# $index is an integer
$ret_mime = $mime->GetPart($index);
This method is deprecated and replaced by PartAt

This method is deprecated. Applications should call PartAt.

Retrieves the direct child at zero-based index. The returned object provides live access to the child stored in the parent MIME tree, so modifying it modifies the parent.

Returns null on failure

top
GetSignerCert
# returns a CkCert
# $index is an integer
$ret_cert = $mime->GetSignerCert($index);
This method is deprecated and replaced by LastSignerCert

Deprecated. Use LastSignerCert instead.

Returns the signer certificate at zero-based index from the most recent verification or security-unwrapping operation.

Returns null on failure

More Information and Examples
top
GetSignerCertChain
# returns a CkCertChain
# $index is an integer
$ret_certChain = $mime->GetSignerCertChain($index);
Introduced in version 9.5.0.40
This method is deprecated.

Deprecated. Retrieve the signer certificate with LastSignerCert and then obtain its certificate chain through the Cert API.

This method returns the chain associated with the signer at zero-based index.

Returns null on failure

top
LastJsonData
# returns a CkJsonObject
$ret_jsonObject = $mime->LastJsonData();
Introduced in version 9.5.0.69
This method is deprecated.

Deprecated. Use GetLastJsonData instead.

Returns a JsonObject containing details produced by the most recent operation when that operation provides structured diagnostic data. For example, after UnwrapSecurity, the JSON may describe the signature, key-transport, content-encryption, and certificate information encountered.

Returns null on failure

top
LoadMimeBytes Deprecated
# $binData is a CkByteData
$status = $mime->LoadMimeBytes($binData);

Parses complete MIME bytes from binData and replaces the current MIME on success. This byte-oriented loader preserves arbitrary 8-bit values and embedded NUL bytes. Parsing tolerance and serialization normalization are the same as LoadMime.

Returns 1 for success, 0 for failure.

top
SetBodyFromBinary Deprecated
# $binData is a CkByteData
$status = $mime->SetBodyFromBinary($binData);

Legacy byte-array method. Sets the decoded body bytes from binData, changes Content-Transfer-Encoding to base64, and preserves the bytes exactly. It does not set a Content-Type, disposition, filename, or name; set those separately when needed. Prefer SetBodyBd when using BinData.

Returns 1 for success, 0 for failure.

top