vendor/swiftmailer/doc/headers.rst
author ymh <ymh.work@gmail.com>
Sat, 24 Sep 2011 15:40:41 +0200
changeset 0 7f95f8617b0b
permissions -rwxr-xr-x
first commit
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
0
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
     1
Message Headers
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
     2
===============
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
     3
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
     4
Sometimes you'll want to add your own headers to a message or modify/remove
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
     5
headers that are already present. You work with the message's HeaderSet to do
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
     6
this.
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
     7
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
     8
Header Basics
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
     9
-------------
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    10
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    11
All MIME entities in Swift Mailer -- including the message itself --
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    12
store their headers in a single object called a HeaderSet. This HeaderSet is
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    13
retrieved with the ``getHeaders()`` method.
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    14
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    15
As mentioned in the previous chapter, everything that forms a part of a
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    16
message in Swift Mailer is a MIME entity that is represented by an instance of
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    17
``Swift_Mime_MimeEntity``. This includes -- most notably -- the
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    18
message object itself, attachments, MIME parts and embedded images. Each of
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    19
these MIME entities consists of a body and a set of headers that describe the
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    20
body.
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    21
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    22
For all of the "standard" headers in these MIME entities, such as the
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    23
``Content-Type``, there are named methods for working with them,
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    24
such as ``setContentType()`` and
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    25
``getContentType()``. This is because headers are a moderately
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    26
complex area of the library. Each header has a slightly different required
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    27
structure that it must meet in order to comply with the standards that govern
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    28
email (and that are checked by spam blockers etc).
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    29
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    30
You fetch the HeaderSet from a MIME entity like so:
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    31
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    32
.. code-block:: php
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    33
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    34
    $message = Swift_Message::newInstance();
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    35
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    36
    //Fetch the HeaderSet from a Message object
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    37
    $headers = $message->getHeaders();
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    38
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    39
    $attachment = Swift_Attachment::fromPath('document.pdf');
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    40
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    41
    //Fetch the HeaderSet from an attachment object
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    42
    $headers = $attachment->getHeaders();
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    43
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    44
The job of the HeaderSet is to contain and manage instances of Header objects.
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    45
Depending upon the MIME entity the HeaderSet came from, the contents of the
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    46
HeaderSet will be different, since an attachment for example has a different
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    47
set of headers to those in a message.
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    48
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    49
You can find out what the HeaderSet contains with a quick loop, dumping out
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    50
the names of the headers:
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    51
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    52
.. code-block:: php
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    53
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    54
    foreach ($headers->getAll() as $header) {
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    55
      printf("%s<br />\n", $header->getFieldName());
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    56
    }
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    57
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    58
    /*
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    59
    Content-Transfer-Encoding
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    60
    Content-Type
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    61
    MIME-Version
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    62
    Date
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    63
    Message-ID
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    64
    From
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    65
    Subject
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    66
    To
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    67
    */
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    68
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    69
You can also dump out the rendered HeaderSet by calling its
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    70
``toString()`` method:
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    71
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    72
.. code-block:: php
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    73
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    74
    echo $headers->toString();
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    75
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    76
    /*
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    77
    Message-ID: <1234869991.499a9ee7f1d5e@swift.generated>
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    78
    Date: Tue, 17 Feb 2009 22:26:31 +1100
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    79
    Subject: Awesome subject!
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    80
    From: sender@example.org
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    81
    To: recipient@example.org
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    82
    MIME-Version: 1.0
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    83
    Content-Type: text/plain; charset=utf-8
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    84
    Content-Transfer-Encoding: quoted-printable
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    85
    */
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    86
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    87
Where the complexity comes in is when you want to modify an existing header.
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    88
This complexity comes from the fact that each header can be of a slightly
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    89
different type (such as a Date header, or a header that contains email
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    90
addresses, or a header that has key-value parameters on it!). Each
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    91
header in the HeaderSet is an instance of ``Swift_Mime_Header``.
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    92
They all have common functionality, but knowing exactly what type of header
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    93
you're working with will allow you a little more control.
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    94
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    95
You can determine the type of header by comparing the return value of its
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    96
``getFieldType()`` method with the constants
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    97
``TYPE_TEXT``, ``TYPE_PARAMETERIZED``,
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    98
``TYPE_DATE``, ``TYPE_MAILBOX``,
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    99
``TYPE_ID`` and ``TYPE_PATH`` which are defined in
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   100
``Swift_Mime_Header``.
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   101
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   102
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   103
.. code-block:: php
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   104
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   105
    foreach ($headers->getAll() as $header) {
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   106
      switch ($header->getFieldType()) {
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   107
        case Swift_Mime_Header::TYPE_TEXT: $type = 'text';
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   108
          break;
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   109
        case Swift_Mime_Header::TYPE_PARAMETERIZED: $type = 'parameterized';
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   110
          break;
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   111
        case Swift_Mime_Header::TYPE_MAILBOX: $type = 'mailbox';
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   112
          break;
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   113
        case Swift_Mime_Header::TYPE_DATE: $type = 'date';
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   114
          break;
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   115
        case Swift_Mime_Header::TYPE_ID: $type = 'ID';
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   116
          break;
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   117
        case Swift_Mime_Header::TYPE_PATH: $type = 'path';
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   118
          break;
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   119
      }
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   120
      printf("%s: is a %s header<br />\n", $header->getFieldName(), $type);
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   121
    }
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   122
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   123
    /*
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   124
    Content-Transfer-Encoding: is a text header
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   125
    Content-Type: is a parameterized header
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   126
    MIME-Version: is a text header
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   127
    Date: is a date header
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   128
    Message-ID: is a ID header
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   129
    From: is a mailbox header
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   130
    Subject: is a text header
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   131
    To: is a mailbox header
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   132
    */
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   133
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   134
Headers can be removed from the set, modified within the set, or added to the
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   135
set.
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   136
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   137
The following sections show you how to work with the HeaderSet and explain the
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   138
details of each implementation of ``Swift_Mime_Header`` that may
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   139
exist within the HeaderSet.
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   140
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   141
Header Types
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   142
------------
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   143
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   144
Because all headers are modeled on different data (dates, addresses,
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   145
text!) there are different types of Header in Swift Mailer. Swift Mailer
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   146
attempts to categorize all possible MIME headers into more general groups,
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   147
defined by a small number of classes.
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   148
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   149
Text Headers
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   150
~~~~~~~~~~~~
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   151
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   152
Text headers are the simplest type of Header. They contain textual information
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   153
with no special information included within it -- for example the Subject
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   154
header in a message.
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   155
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   156
There's nothing particularly interesting about a text header, though it is
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   157
probably the one you'd opt to use if you need to add a custom header to a
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   158
message. It represents text just like you'd think it does. If the text
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   159
contains characters that are not permitted in a message header (such as new
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   160
lines, or non-ascii characters) then the header takes care of encoding the
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   161
text so that it can be used.
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   162
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   163
No header -- including text headers -- in Swift Mailer is vulnerable
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   164
to header-injection attacks. Swift Mailer breaks any attempt at header
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   165
injection by encoding the dangerous data into a non-dangerous form.
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   166
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   167
It's easy to add a new text header to a HeaderSet. You do this by calling the
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   168
HeaderSet's ``addTextHeader()`` method.
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   169
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   170
.. code-block:: php
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   171
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   172
    $message = Swift_Message::newInstance();
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   173
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   174
    $headers = $message->getHeaders();
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   175
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   176
    $headers->addTextHeader('Your-Header-Name', 'the header value');
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   177
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   178
Changing the value of an existing text header is done by calling it's
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   179
``setValue()`` method.
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   180
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   181
.. code-block:: php
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   182
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   183
    $subject = $message->getHeaders()->getHeader('Subject');
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   184
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   185
    $subject->setValue('new subject');
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   186
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   187
When output via ``toString()``, a text header produces something
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   188
like the following:
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   189
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   190
.. code-block:: php
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   191
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   192
    $subject = $message->getHeaders()->getHeader('Subject');
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   193
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   194
    $subject->setValue('amazing subject line');
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   195
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   196
    echo $subject->toString();
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   197
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   198
    /*
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   199
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   200
    Subject: amazing subject line
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   201
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   202
    */
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   203
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   204
If the header contains any characters that are outside of the US-ASCII range
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   205
however, they will be encoded. This is nothing to be concerned about since
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   206
mail clients will decode them back.
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   207
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   208
.. code-block:: php
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   209
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   210
    $subject = $message->getHeaders()->getHeader('Subject');
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   211
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   212
    $subject->setValue('contains – dash');
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   213
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   214
    echo $subject->toString();
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   215
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   216
    /*
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   217
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   218
    Subject: contains =?utf-8?Q?=E2=80=93?= dash
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   219
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   220
    */
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   221
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   222
Parameterized Headers
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   223
~~~~~~~~~~~~~~~~~~~~~
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   224
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   225
Parameterized headers are text headers that contain key-value parameters
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   226
following the textual content. The Content-Type header of a message is a
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   227
parameterized header since it contains charset information after the content
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   228
type.
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   229
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   230
The parameterized header type is a special type of text header. It extends the
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   231
text header by allowing additional information to follow it. All of the
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   232
methods from text headers are available in addition to the methods described
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   233
here.
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   234
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   235
Adding a parameterized header to a HeaderSet is done by using the
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   236
``addParameterizedHeader()`` method which takes a text value like
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   237
``addTextHeader()`` but it also accepts an associative array of
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   238
key-value parameters.
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   239
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   240
.. code-block:: php
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   241
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   242
    $message = Swift_Message::newInstance();
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   243
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   244
    $headers = $message->getHeaders();
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   245
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   246
    $headers->addParameterizedHeader(
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   247
      'Header-Name', 'header value',
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   248
      array('foo' => 'bar')
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   249
      );
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   250
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   251
To change the text value of the header, call it's ``setValue()``
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   252
method just as you do with text headers.
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   253
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   254
To change the parameters in the header, call the header's
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   255
``setParameters()`` method or the ``setParameter()``
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   256
method (note the pluralization).
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   257
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   258
.. code-block:: php
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   259
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   260
    $type = $message->getHeaders()->getHeader('Content-Type');
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   261
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   262
    //setParameters() takes an associative array
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   263
    $type->setParameters(array(
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   264
      'name' => 'file.txt',
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   265
      'charset' => 'iso-8859-1'
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   266
      ));
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   267
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   268
    //setParameter() takes two args for $key and $value
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   269
    $type->setParameter('charset', 'iso-8859-1');
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   270
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   271
When output via ``toString()``, a parameterized header produces
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   272
something like the following:
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   273
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   274
.. code-block:: php
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   275
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   276
    $type = $message->getHeaders()->getHeader('Content-Type');
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   277
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   278
    $type->setValue('text/html');
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   279
    $type->setParameter('charset', 'utf-8');
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   280
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   281
    echo $type->toString();
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   282
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   283
    /*
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   284
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   285
    Content-Type: text/html; charset=utf-8
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   286
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   287
    */
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   288
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   289
If the header contains any characters that are outside of the US-ASCII range
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   290
however, they will be encoded, just like they are for text headers. This is
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   291
nothing to be concerned about since mail clients will decode them back.
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   292
Likewise, if the parameters contain any non-ascii characters they will be
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   293
encoded so that they can be transmitted safely.
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   294
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   295
.. code-block:: php
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   296
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   297
    $attachment = Swift_Attachment::newInstance();
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   298
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   299
    $disp = $attachment->getHeaders()->getHeader('Content-Disposition');
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   300
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   301
    $disp->setValue('attachment');
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   302
    $disp->setParameter('filename', 'report–may.pdf');
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   303
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   304
    echo $disp->toString();
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   305
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   306
    /*
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   307
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   308
    Content-Disposition: attachment; filename*=utf-8''report%E2%80%93may.pdf
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   309
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   310
    */
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   311
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   312
Date Headers
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   313
~~~~~~~~~~~~
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   314
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   315
Date headers contains an RFC 2822 formatted date (i.e. what PHP's
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   316
``date('r')`` returns). They are used anywhere a date or time is
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   317
needed to be presented as a message header.
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   318
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   319
The data on which a date header is modeled is simply a UNIX timestamp such as that
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   320
returned by ``time()`` or ``strtotime()``.  The timestamp
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   321
is used to create a correctly structured RFC 2822 formatted date such as
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   322
``Tue, 17 Feb 2009 22:26:31 +1100``.
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   323
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   324
The obvious place this header type is used is in the ``Date:`` header
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   325
of the message itself.
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   326
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   327
It's easy to add a new date header to a HeaderSet.  You do this by calling
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   328
the HeaderSet's ``addDateHeader()`` method.
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   329
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   330
.. code-block:: php
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   331
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   332
    $message = Swift_Message::newInstance();
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   333
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   334
    $headers = $message->getHeaders();
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   335
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   336
    $headers->addDateHeader('Your-Header-Name', strtotime('3 days ago'));
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   337
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   338
Changing the value of an existing date header is done by calling it's
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   339
``setTimestamp()`` method.
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   340
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   341
.. code-block:: php
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   342
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   343
    $date = $message->getHeaders()->getHeader('Date');
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   344
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   345
    $date->setTimestamp(time());
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   346
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   347
When output via ``toString()``, a date header produces something
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   348
like the following:
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   349
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   350
.. code-block:: php
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   351
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   352
    $date = $message->getHeaders()->getHeader('Date');
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   353
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   354
    echo $date->toString();
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   355
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   356
    /*
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   357
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   358
    Date: Wed, 18 Feb 2009 13:35:02 +1100
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   359
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   360
    */
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   361
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   362
Mailbox (e-mail address) Headers
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   363
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   364
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   365
Mailbox headers contain one or more email addresses, possibly with
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   366
personalized names attached to them. The data on which they are modeled is
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   367
represented by an associative array of email addresses and names.
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   368
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   369
Mailbox headers are probably the most complex header type to understand in
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   370
Swift Mailer because they accept their input as an array which can take
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   371
various forms, as described in the previous chapter.
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   372
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   373
All of the headers that contain e-mail addresses in a message -- with the
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   374
exception of ``Return-Path:`` which has a stricter syntax --
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   375
use this header type. That is, ``To:``, ``From:``
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   376
etc.
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   377
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   378
You add a new mailbox header to a HeaderSet by calling the HeaderSet's
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   379
``addMailboxHeader()`` method.
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   380
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   381
.. code-block:: php
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   382
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   383
    $message = Swift_Message::newInstance();
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   384
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   385
    $headers = $message->getHeaders();
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   386
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   387
    $headers->addMailboxHeader('Your-Header-Name', array(
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   388
      'person1@example.org' => 'Person Name One',
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   389
      'person2@example.org',
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   390
      'person3@example.org',
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   391
      'person4@example.org' => 'Another named person'
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   392
      ));
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   393
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   394
Changing the value of an existing mailbox header is done by calling it's
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   395
``setNameAddresses()`` method.
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   396
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   397
.. code-block:: php
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   398
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   399
    $to = $message->getHeaders()->getHeader('To');
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   400
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   401
    $to->setNameAddresses(array(
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   402
      'joe@example.org' => 'Joe Bloggs',
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   403
      'john@example.org' => 'John Doe',
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   404
      'no-name@example.org'
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   405
      ));
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   406
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   407
If you don't wish to concern yourself with the complicated accepted input
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   408
formats accepted by ``setNameAddresses()`` as described in the previous chapter
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   409
and you only want to set one or more addresses (not names) then you can just
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   410
use the ``setAddresses()`` method instead.
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   411
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   412
.. code-block:: php
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   413
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   414
    $to = $message->getHeaders()->getHeader('To');
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   415
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   416
    $to->setAddresses(array(
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   417
      'joe@example.org',
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   418
      'john@example.org',
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   419
      'no-name@example.org'
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   420
      ));
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   421
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   422
.. note::
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   423
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   424
    Both methods will accept the above input format in practice.
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   425
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   426
If all you want to do is set a single address in the header, you can use a
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   427
string as the input parameter to ``setAddresses()`` and/or
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   428
``setNameAddresses()``.
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   429
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   430
.. code-block:: php
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   431
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   432
    $to = $message->getHeaders()->getHeader('To');
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   433
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   434
    $to->setAddresses('joe-bloggs@example.org');
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   435
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   436
When output via ``toString()``, a mailbox header produces
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   437
something like the following:
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   438
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   439
.. code-block:: php
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   440
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   441
    $to = $message->getHeaders()->getHeader('To');
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   442
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   443
    $to->setNameAddresses(array(
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   444
      'person1@example.org' => 'Name of Person',
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   445
      'person2@example.org',
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   446
      'person3@example.org' => 'Another Person'
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   447
    ));
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   448
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   449
    echo $to->toString();
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   450
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   451
    /*
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   452
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   453
    To: Name of Person <person1@example.org>, person2@example.org, Another Person
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   454
     <person3@example.org>
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   455
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   456
    */
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   457
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   458
ID Headers
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   459
~~~~~~~~~~
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   460
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   461
ID headers contain identifiers for the entity (or the message). The most
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   462
notable ID header is the Message-ID header on the message itself.
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   463
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   464
An ID that exists inside an ID header looks more-or-less less like an email
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   465
address.  For example, ``<![CDATA[<1234955437.499becad62ec2@example.org>]]>``.
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   466
The part to the left of the @ sign is usually unique, based on the current time and
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   467
some random factor.  The part on the right is usually a domain name.
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   468
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   469
Any ID passed the an ID header's ``setId()`` method absolutely
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   470
MUST conform to this structure, otherwise you'll get an Exception thrown at you
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   471
by Swift Mailer (a ``Swift_RfcComplianceException``).  This is to
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   472
ensure that the generated email complies with relevant RFC documents and therefore
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   473
is less likely to be blocked as spam.
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   474
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   475
It's easy to add a new ID header to a HeaderSet.  You do this by calling
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   476
the HeaderSet's ``addIdHeader()`` method.
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   477
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   478
.. code-block:: php
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   479
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   480
    $message = Swift_Message::newInstance();
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   481
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   482
    $headers = $message->getHeaders();
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   483
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   484
    $headers->addIdHeader('Your-Header-Name', '123456.unqiue@example.org');
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   485
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   486
Changing the value of an existing date header is done by calling its
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   487
``setId()`` method.
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   488
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   489
.. code-block:: php
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   490
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   491
    $msgId = $message->getHeaders()->getHeader('Message-ID');
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   492
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   493
    $msgId->setId(time() . '.' . uniqid('thing') . '@example.org');
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   494
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   495
When output via ``toString()``, an ID header produces something
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   496
like the following:
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   497
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   498
.. code-block:: php
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   499
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   500
    $msgId = $message->getHeaders()->getHeader('Message-ID');
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   501
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   502
    echo $msgId->toString();
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   503
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   504
    /*
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   505
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   506
    Message-ID: <1234955437.499becad62ec2@example.org>
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   507
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   508
    */
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   509
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   510
Path Headers
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   511
~~~~~~~~~~~~
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   512
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   513
Path headers are like very-restricted mailbox headers. They contain a single
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   514
email address with no associated name. The Return-Path header of a message is
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   515
a path header.
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   516
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   517
You add a new path header to a HeaderSet by calling the HeaderSet's
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   518
``addPathHeader()`` method.
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   519
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   520
.. code-block:: php
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   521
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   522
    $message = Swift_Message::newInstance();
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   523
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   524
    $headers = $message->getHeaders();
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   525
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   526
    $headers->addPathHeader('Your-Header-Name', 'person@example.org');
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   527
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   528
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   529
Changing the value of an existing path header is done by calling its
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   530
``setAddress()`` method.
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   531
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   532
.. code-block:: php
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   533
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   534
    $return = $message->getHeaders()->getHeader('Return-Path');
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   535
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   536
    $return->setAddress('my-address@example.org');
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   537
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   538
When output via ``toString()``, a path header produces something
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   539
like the following:
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   540
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   541
.. code-block:: php
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   542
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   543
    $return = $message->getHeaders()->getHeader('Return-Path');
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   544
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   545
    $return->setAddress('person@example.org');
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   546
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   547
    echo $return->toString();
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   548
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   549
    /*
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   550
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   551
    Return-Path: <person@example.org>
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   552
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   553
    */
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   554
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   555
Header Operations
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   556
-----------------
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   557
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   558
Working with the headers in a message involves knowing how to use the methods
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   559
on the HeaderSet and on the individual Headers within the HeaderSet.
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   560
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   561
Adding new Headers
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   562
~~~~~~~~~~~~~~~~~~
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   563
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   564
New headers can be added to the HeaderSet by using one of the provided
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   565
``add..Header()`` methods.
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   566
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   567
To add a header to a MIME entity (such as the message):
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   568
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   569
Get the HeaderSet from the entity by via its ``getHeaders()``
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   570
method.
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   571
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   572
* Add the header to the HeaderSet by calling one of the ``add..Header()``
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   573
  methods.
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   574
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   575
The added header will appear in the message when it is sent.
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   576
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   577
.. code-block:: php
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   578
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   579
    //Adding a custom header to a message
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   580
    $message = Swift_Message::newInstance();
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   581
    $headers = $message->getHeaders();
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   582
    $headers->addTextHeader('X-Mine', 'something here');
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   583
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   584
    //Adding a custom header to an attachment
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   585
    $attachment = Swift_Attachment::fromPath('/path/to/doc.pdf');
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   586
    $attachment->getHeaders()->addDateHeader('X-Created-Time', time());
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   587
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   588
Retrieving Headers
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   589
~~~~~~~~~~~~~~~~~~
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   590
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   591
Headers are retrieved through the HeaderSet's ``get()`` and
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   592
``getAll()`` methods.
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   593
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   594
To get a header, or several headers from a MIME entity:
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   595
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   596
* Get the HeaderSet from the entity by via its ``getHeaders()`` method.
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   597
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   598
* Get the header(s) from the HeaderSet by calling either ``get()`` or
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   599
  ``getAll()``.
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   600
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   601
When using ``get()`` a single header is returned that matches the
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   602
name (case insensitive) that is passed to it. When using
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   603
``getAll()`` with a header name, an array of headers with that
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   604
name are returned. Calling ``getAll()`` with no arguments returns
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   605
an array of all headers present in the entity.
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   606
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   607
.. note::
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   608
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   609
    It's valid for some headers to appear more than once in a message (e.g.
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   610
    the Received header). For this reason ``getAll()`` exists to fetch all
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   611
    headers with a specified name. In addition, ``get()`` accepts an optional
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   612
    numerical index, starting from zero to specify which header you want more
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   613
    specifically.
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   614
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   615
.. note::
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   616
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   617
    If you want to modify the contents of the header and you don't know for
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   618
    sure what type of header it is then you may need to check the type by
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   619
    calling its ``getFieldType()`` method.
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   620
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   621
    .. code-block:: php
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   622
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   623
        $headers = $message->getHeaders();
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   624
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   625
        //Get the To: header
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   626
        $toHeader = $headers->get('To');
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   627
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   628
        //Get all headers named "X-Foo"
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   629
        $fooHeaders = $headers->getAll('X-Foo');
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   630
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   631
        //Get the second header named "X-Foo"
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   632
        $foo = $headers->get('X-Foo', 1);
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   633
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   634
        //Get all headers that are present
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   635
        $all = $headers->getAll();
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   636
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   637
Check if a Header Exists
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   638
~~~~~~~~~~~~~~~~~~~~~~~~
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   639
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   640
You can check if a named header is present in a HeaderSet by calling its
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   641
``has()`` method.
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   642
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   643
To check if a header exists:
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   644
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   645
* Get the HeaderSet from the entity by via its ``getHeaders()`` method.
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   646
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   647
* Call the HeaderSet's ``has()`` method specifying the header you're looking
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   648
  for.
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   649
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   650
If the header exists, ``true`` will be returned or
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   651
``false`` if not.
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   652
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   653
.. note::
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   654
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   655
    It's valid for some headers to appear more than once in a message (e.g.
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   656
    the Received header). For this reason ``has()`` accepts an optional
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   657
    numerical index, starting from zero to specify which header you want to
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   658
    check more specifically.
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   659
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   660
    .. code-block:: php
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   661
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   662
        $headers = $message->getHeaders();
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   663
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   664
        //Check if the To: header exists
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   665
        if ($headers->has('To')) {
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   666
          echo 'To: exists';
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   667
        }
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   668
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   669
        //Check if an X-Foo header exists twice (i.e. check for the 2nd one)
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   670
        if ($headers->has('X-Foo', 1)) {
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   671
          echo 'Second X-Foo header exists';
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   672
        }
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   673
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   674
Removing Headers
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   675
~~~~~~~~~~~~~~~~
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   676
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   677
Removing a Header from the HeaderSet is done by calling the HeaderSet's
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   678
``remove()`` or ``removeAll()`` methods.
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   679
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   680
To remove an existing header:
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   681
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   682
* Get the HeaderSet from the entity by via its ``getHeaders()`` method.
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   683
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   684
* Call the HeaderSet's ``remove()`` or ``removeAll()`` methods specifying the
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   685
  header you want to remove.
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   686
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   687
When calling ``remove()`` a single header will be removed. When
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   688
calling ``removeAll()`` all headers with the given name will be
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   689
removed. If no headers exist with the given name, no errors will occur.
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   690
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   691
.. note::
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   692
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   693
    It's valid for some headers to appear more than once in a message (e.g.
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   694
    the Received header). For this reason ``remove()`` accepts an optional
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   695
    numerical index, starting from zero to specify which header you want to
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   696
    check more specifically. For the same reason, ``removeAll()`` exists to
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   697
    remove all headers that have the given name.
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   698
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   699
    .. code-block:: php
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   700
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   701
        $headers = $message->getHeaders();
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   702
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   703
        //Remove the Subject: header
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   704
        $headers->remove('Subject');
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   705
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   706
        //Remove all X-Foo headers
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   707
        $headers->removeAll('X-Foo');
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   708
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   709
        //Remove only the second X-Foo header
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   710
        $headers->remove('X-Foo', 1);
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   711
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   712
Modifying a Header's Content
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   713
~~~~~~~~~~~~~~~~~~~~~~~~~~~~
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   714
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   715
To change a Header's content you should know what type of header it is and
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   716
then call it's appropriate setter method. All headers also have a
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   717
``setFieldBodyModel()`` method that accepts a mixed parameter and
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   718
delegates to the correct setter.
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   719
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   720
To modify an existing header:
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   721
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   722
* Get the HeaderSet from the entity by via its ``getHeaders()`` method.
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   723
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   724
* Get the Header by using the HeaderSet's ``get()``.
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   725
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   726
* Call the Header's appropriate setter method or call the header's
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   727
  ``setFieldBodyModel()`` method.
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   728
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   729
The header will be updated inside the HeaderSet and the changes will be seen
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   730
when the message is sent.
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   731
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   732
.. code-block:: php
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   733
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   734
    $headers = $message->getHeaders();
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   735
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   736
    //Change the Subject: header
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   737
    $subj = $headers->get('Subject');
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   738
    $subj->setValue('new subject here');
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   739
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   740
    //Change the To: header
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   741
    $to = $headers->get('To');
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   742
    $to->setNameAddresses(array(
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   743
      'person@example.org' => 'Person',
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   744
      'thing@example.org'
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   745
    ));
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   746
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   747
    //Using the setFieldBodyModel() just delegates to the correct method
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   748
    // So here to calls setNameAddresses()
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   749
    $to->setFieldBodyModel(array(
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   750
      'person@example.org' => 'Person',
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   751
      'thing@example.org'
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   752
    ));