Als Eingabedaten wird eine Liste der Empfanger benötigt, sowie ein MIME Objekt. Das einfachste MIME Objekt hat den Content-Type text/plain, es ist aber auch jegliches andere MIME Objekt möglich.
Hier der Beispielcode ohne jegliche Fehlerbehandlung, der eine vollständige RFC822[1] Mail ausgibt.
GpgmeCtx ctx; GpgmeData ciphertext, plaintext; GpgmeRecipients rset; gpgme_new (&ctx); gpgme_set_armor (ctx, 1); gpgme_data_new_from_mem (&plaintext, mime_object, mime_object_len, TRUE ); err = gpgme_data_new ( &ciphertext ); gpgme_recipients_new (&rset); gpgme_recipients_add_name (rset, "Bob");, gpgme_op_encrypt (ctx, rset, plaintext, ciphertext ); gpgme_data_release (plaintext); gpgme_recipients_release (rset); print_mail_headers_without_content_lines (); fputs ( "Content-Type: multipart/encrypted;\r\n" " protocol=\"application/pgp-encrypted\";\r\n" " boundary=\"42=.42=.42=.42\"\r\n" "\r\n--42=.42=.42=.42\r\n" "Content-Type: application/pgp-encrypted\r\n\r\n" "Version: 1\r\n "\r\n--42=.42=.42=.42\r\n" "Content-Type: application/octet-stream\r\n\r\n", stdout ); gpgme_data_rewind (ciphertext); while ( !gpgme_data_read (ciphertext, buf, sizeof buf, &nread ) ) { fwrite (buf, nread, 1, stdout ); } fputs ( "\r\n--42=.42=.42=.42--\r\n", stdout ); gpgme_release (ctx); gpgme_data_release(plaintext);
print_mail_headers_without_content_lines sollte alle notwendigen Mail Header mit der Ausnahme der Content-*: Zeilen ausgeben. Die Content Zeilen dürfen nicht mit ausgegeben werden, da diese von obigem Coder erzeugt werden. Normalerweise ist es möglich eine existierende Mail zu verschlüsseln, indem die alten Header gespeichert werden, die Content Header benutzt werden um das MIME Objekt zu bilden und dann die obigen Operationen durchgeführt werden.