diff --git a/res/res_pjsip_messaging.c b/res/res_pjsip_messaging.c
index 72b7d17dc2958e70850afd78932e70f21b9619fc..68bd76158882d8c523069124afd4955838488621 100644
--- a/res/res_pjsip_messaging.c
+++ b/res/res_pjsip_messaging.c
@@ -316,10 +316,7 @@ static int is_msg_var_blocked(const char *name)
 {
 	int i;
 
-	/*
-	 * Don't block Content-Type or Max-Forwards headers because the
-	 * user can override them.
-	 */
+	/* Don't block the Max-Forwards header because the user can override it */
 	static const char *hdr[] = {
 		"To",
 		"From",
@@ -330,6 +327,7 @@ static int is_msg_var_blocked(const char *name)
 		"CSeq",
 		"Allow",
 		"Content-Length",
+		"Content-Type",
 		"Request-URI",
 	};
 
@@ -635,11 +633,40 @@ static struct msg_data *msg_data_create(const struct ast_msg *msg, const char *t
 	return mdata;
 }
 
+static void update_content_type(pjsip_tx_data *tdata, struct ast_msg *msg, struct ast_sip_body *body)
+{
+	static const pj_str_t CONTENT_TYPE = { "Content-Type", sizeof("Content-Type") - 1 };
+
+	const char *content_type = ast_msg_get_var(msg, pj_strbuf(&CONTENT_TYPE));
+	if (content_type) {
+		pj_str_t type, subtype;
+		pjsip_ctype_hdr *parsed;
+
+		/* Let pjsip do the parsing for us */
+		parsed = pjsip_parse_hdr(tdata->pool, &CONTENT_TYPE,
+			ast_strdupa(content_type), strlen(content_type),
+			NULL);
+
+		if (!parsed) {
+			ast_log(LOG_WARNING, "Failed to parse '%s' as a content type. Using text/plain\n",
+				content_type);
+			return;
+		}
+
+		/* We need to turn type and subtype into zero-terminated strings */
+		pj_strdup_with_null(tdata->pool, &type, &parsed->media.type);
+		pj_strdup_with_null(tdata->pool, &subtype, &parsed->media.subtype);
+
+		body->type = pj_strbuf(&type);
+		body->subtype = pj_strbuf(&subtype);
+	}
+}
+
 static int msg_send(void *data)
 {
 	struct msg_data *mdata = data; /* The caller holds a reference */
 
-	const struct ast_sip_body body = {
+	struct ast_sip_body body = {
 		.type = "text",
 		.subtype = "plain",
 		.body_text = ast_msg_get_body(mdata->msg)
@@ -664,6 +691,7 @@ static int msg_send(void *data)
 
 	update_to(tdata, mdata->to);
 	update_from(tdata, mdata->from);
+	update_content_type(tdata, mdata->msg, &body);
 
 	if (ast_sip_add_body(tdata, &body)) {
 		pjsip_tx_data_dec_ref(tdata);