DKIM.DkimSigner.GenerateDkimHeaderValue C# (CSharp) Method

GenerateDkimHeaderValue() public method

public GenerateDkimHeaderValue ( Email email ) : string
email Email
return string
	    public string GenerateDkimHeaderValue(Email email)
		{
			// timestamp  - seconds since 00:00:00 on January 1, 1970 UTC
			TimeSpan t = DateTime.Now.ToUniversalTime() -
						 DateTime.SpecifyKind(DateTime.Parse("00:00:00 January 1, 1970"), DateTimeKind.Utc);


			var signatureValue = new StringBuilder();

			const string start = /*Email.NewLine +*/ " ";
			const string end = ";";
			

			signatureValue.Append("v=1;");
			


			// algorithm used
			signatureValue.Append(start);
			signatureValue.Append("a=");
			signatureValue.Append(GetAlgorithmName());
			signatureValue.Append(end);


		

			// Canonicalization
			signatureValue.Append(start);
			signatureValue.Append("c=");
			signatureValue.Append(this.HeaderCanonicalization.ToString().ToLower());
			signatureValue.Append('/');
			signatureValue.Append(this.BodyCanonicalization.ToString().ToLower());
			signatureValue.Append(end);


			// signing domain
			signatureValue.Append(start);
			signatureValue.Append("d=");
			signatureValue.Append(_domain);
			signatureValue.Append(end);



			// headers to be signed
			signatureValue.Append(start);
			signatureValue.Append("h=");
			foreach (var header in _headersToSign)
			{
				signatureValue.Append(header);
				signatureValue.Append(':');
			}
			signatureValue.Length--;
			signatureValue.Append(end);



			// i=identity
			// not supported


			// l=body length
			//not supported



			// public key location
			signatureValue.Append(start);
			signatureValue.Append("q=dns/txt");
			signatureValue.Append(end);



			

			// selector
			signatureValue.Append(start);
			signatureValue.Append("s=");
			signatureValue.Append(_selector);
			signatureValue.Append(end);


			// time sent
			signatureValue.Append(start);
			signatureValue.Append("t=");
			signatureValue.Append((int)t.TotalSeconds);
			signatureValue.Append(end);


			// x=expiration
			// not supported


			// hash of body
			signatureValue.Append(start);
			signatureValue.Append("bh=");
			signatureValue.Append(SignBody(email.Body));
			signatureValue.Append(end);


			// x=copied header fields
			// not supported



			signatureValue.Append(start);
			signatureValue.Append("b=");
			

			return signatureValue.ToString();
		}

Usage Example

Ejemplo n.º 1
0
        public static MailMessage DkimSign([NotNull] this MailMessage message, DkimSigner signer)
        {
            if (message == null)
            {
                throw new ArgumentNullException("message");
            }

            if (signer == null)
            {
                throw new ArgumentNullException("signer");
            }

            message.BodyEncoding    = signer.Encoding;
            message.SubjectEncoding = signer.Encoding;
            message.HeadersEncoding = signer.Encoding;


            // get email content and generate initial signature
            var email = Email.Parse(message.GetText());

            if (!CanSign(email))
            {
                throw new InvalidOperationException("Unable to Domain Key sign the message");
            }

            var value = signer.GenerateDkimHeaderValue(email);



            // signature value get formatted so add dummy signature value then remove it
            message.Headers.Prepend(DkimSigner.SignatureKey, value + new string('0', 70));
            email = message.Parse();
            var formattedSig = email.Headers[DkimSigner.SignatureKey].Value;

            email.Headers[DkimSigner.SignatureKey].Value = formattedSig.Substring(0, formattedSig.Length - 70);



            // sign email
            value += signer.GenerateSignature(email);
            message.Headers.Set(DkimSigner.SignatureKey, value);


            return(message);
        }
All Usage Examples Of DKIM.DkimSigner::GenerateDkimHeaderValue